diff --git a/src/Umbraco.Web.UI.Client/lib/jquery/jquery-2.0.3.min.js b/src/Umbraco.Web.UI.Client/lib/jquery/jquery-2.0.3.min.js index 5fb3abb4a7..e8685eb042 100644 --- a/src/Umbraco.Web.UI.Client/lib/jquery/jquery-2.0.3.min.js +++ b/src/Umbraco.Web.UI.Client/lib/jquery/jquery-2.0.3.min.js @@ -1,5 +1,4 @@ /*! jQuery v2.0.3 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license -//@ sourceMappingURL=jquery-2.0.3.min.map */ (function (e, undefined) { var t, n, r = typeof undefined, i = e.location, o = e.document, s = o.documentElement, a = e.jQuery, u = e.$, l = {}, c = [], p = "2.0.3", f = c.concat, h = c.push, d = c.slice, g = c.indexOf, m = l.toString, y = l.hasOwnProperty, v = p.trim, x = function (e, n) { return new x.fn.init(e, n, t) }, b = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, w = /\S+/g, T = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, C = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, k = /^-ms-/, N = /-([\da-z])/gi, E = function (e, t) { return t.toUpperCase() }, S = function () { o.removeEventListener("DOMContentLoaded", S, !1), e.removeEventListener("load", S, !1), x.ready() }; x.fn = x.prototype = { jquery: p, constructor: x, init: function (e, t, n) { var r, i; if (!e) return this; if ("string" == typeof e) { if (r = "<" === e.charAt(0) && ">" === e.charAt(e.length - 1) && e.length >= 3 ? [null, e, null] : T.exec(e), !r || !r[1] && t) return !t || t.jquery ? (t || n).find(e) : this.constructor(t).find(e); if (r[1]) { if (t = t instanceof x ? t[0] : t, x.merge(this, x.parseHTML(r[1], t && t.nodeType ? t.ownerDocument || t : o, !0)), C.test(r[1]) && x.isPlainObject(t)) for (r in t) x.isFunction(this[r]) ? this[r](t[r]) : this.attr(r, t[r]); return this } return i = o.getElementById(r[2]), i && i.parentNode && (this.length = 1, this[0] = i), this.context = o, this.selector = e, this } return e.nodeType ? (this.context = this[0] = e, this.length = 1, this) : x.isFunction(e) ? n.ready(e) : (e.selector !== undefined && (this.selector = e.selector, this.context = e.context), x.makeArray(e, this)) }, selector: "", length: 0, toArray: function () { return d.call(this) }, get: function (e) { return null == e ? this.toArray() : 0 > e ? this[this.length + e] : this[e] }, pushStack: function (e) { var t = x.merge(this.constructor(), e); return t.prevObject = this, t.context = this.context, t }, each: function (e, t) { return x.each(this, e, t) }, ready: function (e) { return x.ready.promise().done(e), this }, slice: function () { return this.pushStack(d.apply(this, arguments)) }, first: function () { return this.eq(0) }, last: function () { return this.eq(-1) }, eq: function (e) { var t = this.length, n = +e + (0 > e ? t : 0); return this.pushStack(n >= 0 && t > n ? [this[n]] : []) }, map: function (e) { return this.pushStack(x.map(this, function (t, n) { return e.call(t, n, t) })) }, end: function () { return this.prevObject || this.constructor(null) }, push: h, sort: [].sort, splice: [].splice }, x.fn.init.prototype = x.fn, x.extend = x.fn.extend = function () { var e, t, n, r, i, o, s = arguments[0] || {}, a = 1, u = arguments.length, l = !1; for ("boolean" == typeof s && (l = s, s = arguments[1] || {}, a = 2), "object" == typeof s || x.isFunction(s) || (s = {}), u === a && (s = this, --a) ; u > a; a++) if (null != (e = arguments[a])) for (t in e) n = s[t], r = e[t], s !== r && (l && r && (x.isPlainObject(r) || (i = x.isArray(r))) ? (i ? (i = !1, o = n && x.isArray(n) ? n : []) : o = n && x.isPlainObject(n) ? n : {}, s[t] = x.extend(l, o, r)) : r !== undefined && (s[t] = r)); return s }, x.extend({ expando: "jQuery" + (p + Math.random()).replace(/\D/g, ""), noConflict: function (t) { return e.$ === x && (e.$ = u), t && e.jQuery === x && (e.jQuery = a), x }, isReady: !1, readyWait: 1, holdReady: function (e) { e ? x.readyWait++ : x.ready(!0) }, ready: function (e) { (e === !0 ? --x.readyWait : x.isReady) || (x.isReady = !0, e !== !0 && --x.readyWait > 0 || (n.resolveWith(o, [x]), x.fn.trigger && x(o).trigger("ready").off("ready"))) }, isFunction: function (e) { return "function" === x.type(e) }, isArray: Array.isArray, isWindow: function (e) { return null != e && e === e.window }, isNumeric: function (e) { return !isNaN(parseFloat(e)) && isFinite(e) }, type: function (e) { return null == e ? e + "" : "object" == typeof e || "function" == typeof e ? l[m.call(e)] || "object" : typeof e }, isPlainObject: function (e) { if ("object" !== x.type(e) || e.nodeType || x.isWindow(e)) return !1; try { if (e.constructor && !y.call(e.constructor.prototype, "isPrototypeOf")) return !1 } catch (t) { return !1 } return !0 }, isEmptyObject: function (e) { var t; for (t in e) return !1; return !0 }, error: function (e) { throw Error(e) }, parseHTML: function (e, t, n) { if (!e || "string" != typeof e) return null; "boolean" == typeof t && (n = t, t = !1), t = t || o; var r = C.exec(e), i = !n && []; return r ? [t.createElement(r[1])] : (r = x.buildFragment([e], t, i), i && x(i).remove(), x.merge([], r.childNodes)) }, parseJSON: JSON.parse, parseXML: function (e) { var t, n; if (!e || "string" != typeof e) return null; try { n = new DOMParser, t = n.parseFromString(e, "text/xml") } catch (r) { t = undefined } return (!t || t.getElementsByTagName("parsererror").length) && x.error("Invalid XML: " + e), t }, noop: function () { }, globalEval: function (e) { var t, n = eval; e = x.trim(e), e && (1 === e.indexOf("use strict") ? (t = o.createElement("script"), t.text = e, o.head.appendChild(t).parentNode.removeChild(t)) : n(e)) }, camelCase: function (e) { return e.replace(k, "ms-").replace(N, E) }, nodeName: function (e, t) { return e.nodeName && e.nodeName.toLowerCase() === t.toLowerCase() }, each: function (e, t, n) { var r, i = 0, o = e.length, s = j(e); if (n) { if (s) { for (; o > i; i++) if (r = t.apply(e[i], n), r === !1) break } else for (i in e) if (r = t.apply(e[i], n), r === !1) break } else if (s) { for (; o > i; i++) if (r = t.call(e[i], i, e[i]), r === !1) break } else for (i in e) if (r = t.call(e[i], i, e[i]), r === !1) break; return e }, trim: function (e) { return null == e ? "" : v.call(e) }, makeArray: function (e, t) { var n = t || []; return null != e && (j(Object(e)) ? x.merge(n, "string" == typeof e ? [e] : e) : h.call(n, e)), n }, inArray: function (e, t, n) { return null == t ? -1 : g.call(t, e, n) }, merge: function (e, t) { var n = t.length, r = e.length, i = 0; if ("number" == typeof n) for (; n > i; i++) e[r++] = t[i]; else while (t[i] !== undefined) e[r++] = t[i++]; return e.length = r, e }, grep: function (e, t, n) { var r, i = [], o = 0, s = e.length; for (n = !!n; s > o; o++) r = !!t(e[o], o), n !== r && i.push(e[o]); return i }, map: function (e, t, n) { var r, i = 0, o = e.length, s = j(e), a = []; if (s) for (; o > i; i++) r = t(e[i], i, n), null != r && (a[a.length] = r); else for (i in e) r = t(e[i], i, n), null != r && (a[a.length] = r); return f.apply([], a) }, guid: 1, proxy: function (e, t) { var n, r, i; return "string" == typeof t && (n = e[t], t = e, e = n), x.isFunction(e) ? (r = d.call(arguments, 2), i = function () { return e.apply(t || this, r.concat(d.call(arguments))) }, i.guid = e.guid = e.guid || x.guid++, i) : undefined }, access: function (e, t, n, r, i, o, s) { var a = 0, u = e.length, l = null == n; if ("object" === x.type(n)) { i = !0; for (a in n) x.access(e, t, a, n[a], !0, o, s) } else if (r !== undefined && (i = !0, x.isFunction(r) || (s = !0), l && (s ? (t.call(e, r), t = null) : (l = t, t = function (e, t, n) { return l.call(x(e), n) })), t)) for (; u > a; a++) t(e[a], n, s ? r : r.call(e[a], a, t(e[a], n))); return i ? e : l ? t.call(e) : u ? t(e[0], n) : o }, now: Date.now, swap: function (e, t, n, r) { var i, o, s = {}; for (o in t) s[o] = e.style[o], e.style[o] = t[o]; i = n.apply(e, r || []); for (o in t) e.style[o] = s[o]; return i } }), x.ready.promise = function (t) { return n || (n = x.Deferred(), "complete" === o.readyState ? setTimeout(x.ready) : (o.addEventListener("DOMContentLoaded", S, !1), e.addEventListener("load", S, !1))), n.promise(t) }, x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function (e, t) { l["[object " + t + "]"] = t.toLowerCase() }); function j(e) { var t = e.length, n = x.type(e); return x.isWindow(e) ? !1 : 1 === e.nodeType && t ? !0 : "array" === n || "function" !== n && (0 === t || "number" == typeof t && t > 0 && t - 1 in e) } t = x(o), function (e, undefined) { var t, n, r, i, o, s, a, u, l, c, p, f, h, d, g, m, y, v = "sizzle" + -new Date, b = e.document, w = 0, T = 0, C = st(), k = st(), N = st(), E = !1, S = function (e, t) { return e === t ? (E = !0, 0) : 0 }, j = typeof undefined, D = 1 << 31, A = {}.hasOwnProperty, L = [], q = L.pop, H = L.push, O = L.push, F = L.slice, P = L.indexOf || function (e) { var t = 0, n = this.length; for (; n > t; t++) if (this[t] === e) return t; return -1 }, R = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", M = "[\\x20\\t\\r\\n\\f]", W = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", $ = W.replace("w", "w#"), B = "\\[" + M + "*(" + W + ")" + M + "*(?:([*^$|!~]?=)" + M + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + $ + ")|)|)" + M + "*\\]", I = ":(" + W + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + B.replace(3, 8) + ")*)|.*)\\)|)", z = RegExp("^" + M + "+|((?:^|[^\\\\])(?:\\\\.)*)" + M + "+$", "g"), _ = RegExp("^" + M + "*," + M + "*"), X = RegExp("^" + M + "*([>+~]|" + M + ")" + M + "*"), U = RegExp(M + "*[+~]"), Y = RegExp("=" + M + "*([^\\]'\"]*)" + M + "*\\]", "g"), V = RegExp(I), G = RegExp("^" + $ + "$"), J = { ID: RegExp("^#(" + W + ")"), CLASS: RegExp("^\\.(" + W + ")"), TAG: RegExp("^(" + W.replace("w", "w*") + ")"), ATTR: RegExp("^" + B), PSEUDO: RegExp("^" + I), CHILD: RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + M + "*(even|odd|(([+-]|)(\\d*)n|)" + M + "*(?:([+-]|)" + M + "*(\\d+)|))" + M + "*\\)|)", "i"), bool: RegExp("^(?:" + R + ")$", "i"), needsContext: RegExp("^" + M + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + M + "*((?:-\\d)?\\d*)" + M + "*\\)|)(?=[^-]|$)", "i") }, Q = /^[^{]+\{\s*\[native \w/, K = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, Z = /^(?:input|select|textarea|button)$/i, et = /^h\d$/i, tt = /'|\\/g, nt = RegExp("\\\\([\\da-f]{1,6}" + M + "?|(" + M + ")|.)", "ig"), rt = function (e, t, n) { var r = "0x" + t - 65536; return r !== r || n ? t : 0 > r ? String.fromCharCode(r + 65536) : String.fromCharCode(55296 | r >> 10, 56320 | 1023 & r) }; try { O.apply(L = F.call(b.childNodes), b.childNodes), L[b.childNodes.length].nodeType } catch (it) { O = { apply: L.length ? function (e, t) { H.apply(e, F.call(t)) } : function (e, t) { var n = e.length, r = 0; while (e[n++] = t[r++]); e.length = n - 1 } } } function ot(e, t, r, i) { var o, s, a, u, l, f, g, m, x, w; if ((t ? t.ownerDocument || t : b) !== p && c(t), t = t || p, r = r || [], !e || "string" != typeof e) return r; if (1 !== (u = t.nodeType) && 9 !== u) return []; if (h && !i) { if (o = K.exec(e)) if (a = o[1]) { if (9 === u) { if (s = t.getElementById(a), !s || !s.parentNode) return r; if (s.id === a) return r.push(s), r } else if (t.ownerDocument && (s = t.ownerDocument.getElementById(a)) && y(t, s) && s.id === a) return r.push(s), r } else { if (o[2]) return O.apply(r, t.getElementsByTagName(e)), r; if ((a = o[3]) && n.getElementsByClassName && t.getElementsByClassName) return O.apply(r, t.getElementsByClassName(a)), r } if (n.qsa && (!d || !d.test(e))) { if (m = g = v, x = t, w = 9 === u && e, 1 === u && "object" !== t.nodeName.toLowerCase()) { f = gt(e), (g = t.getAttribute("id")) ? m = g.replace(tt, "\\$&") : t.setAttribute("id", m), m = "[id='" + m + "'] ", l = f.length; while (l--) f[l] = m + mt(f[l]); x = U.test(e) && t.parentNode || t, w = f.join(",") } if (w) try { return O.apply(r, x.querySelectorAll(w)), r } catch (T) { } finally { g || t.removeAttribute("id") } } } return kt(e.replace(z, "$1"), t, r, i) } function st() { var e = []; function t(n, r) { return e.push(n += " ") > i.cacheLength && delete t[e.shift()], t[n] = r } return t } function at(e) { return e[v] = !0, e } function ut(e) { var t = p.createElement("div"); try { return !!e(t) } catch (n) { return !1 } finally { t.parentNode && t.parentNode.removeChild(t), t = null } } function lt(e, t) { var n = e.split("|"), r = e.length; while (r--) i.attrHandle[n[r]] = t } function ct(e, t) { var n = t && e, r = n && 1 === e.nodeType && 1 === t.nodeType && (~t.sourceIndex || D) - (~e.sourceIndex || D); if (r) return r; if (n) while (n = n.nextSibling) if (n === t) return -1; return e ? 1 : -1 } function pt(e) { return function (t) { var n = t.nodeName.toLowerCase(); return "input" === n && t.type === e } } function ft(e) { return function (t) { var n = t.nodeName.toLowerCase(); return ("input" === n || "button" === n) && t.type === e } } function ht(e) { return at(function (t) { return t = +t, at(function (n, r) { var i, o = e([], n.length, t), s = o.length; while (s--) n[i = o[s]] && (n[i] = !(r[i] = n[i])) }) }) } s = ot.isXML = function (e) { var t = e && (e.ownerDocument || e).documentElement; return t ? "HTML" !== t.nodeName : !1 }, n = ot.support = {}, c = ot.setDocument = function (e) { var t = e ? e.ownerDocument || e : b, r = t.defaultView; return t !== p && 9 === t.nodeType && t.documentElement ? (p = t, f = t.documentElement, h = !s(t), r && r.attachEvent && r !== r.top && r.attachEvent("onbeforeunload", function () { c() }), n.attributes = ut(function (e) { return e.className = "i", !e.getAttribute("className") }), n.getElementsByTagName = ut(function (e) { return e.appendChild(t.createComment("")), !e.getElementsByTagName("*").length }), n.getElementsByClassName = ut(function (e) { return e.innerHTML = "
", e.firstChild.className = "i", 2 === e.getElementsByClassName("i").length }), n.getById = ut(function (e) { return f.appendChild(e).id = v, !t.getElementsByName || !t.getElementsByName(v).length }), n.getById ? (i.find.ID = function (e, t) { if (typeof t.getElementById !== j && h) { var n = t.getElementById(e); return n && n.parentNode ? [n] : [] } }, i.filter.ID = function (e) { var t = e.replace(nt, rt); return function (e) { return e.getAttribute("id") === t } }) : (delete i.find.ID, i.filter.ID = function (e) { var t = e.replace(nt, rt); return function (e) { var n = typeof e.getAttributeNode !== j && e.getAttributeNode("id"); return n && n.value === t } }), i.find.TAG = n.getElementsByTagName ? function (e, t) { return typeof t.getElementsByTagName !== j ? t.getElementsByTagName(e) : undefined } : function (e, t) { var n, r = [], i = 0, o = t.getElementsByTagName(e); if ("*" === e) { while (n = o[i++]) 1 === n.nodeType && r.push(n); return r } return o }, i.find.CLASS = n.getElementsByClassName && function (e, t) { return typeof t.getElementsByClassName !== j && h ? t.getElementsByClassName(e) : undefined }, g = [], d = [], (n.qsa = Q.test(t.querySelectorAll)) && (ut(function (e) { e.innerHTML = "", e.querySelectorAll("[selected]").length || d.push("\\[" + M + "*(?:value|" + R + ")"), e.querySelectorAll(":checked").length || d.push(":checked") }), ut(function (e) { var n = t.createElement("input"); n.setAttribute("type", "hidden"), e.appendChild(n).setAttribute("t", ""), e.querySelectorAll("[t^='']").length && d.push("[*^$]=" + M + "*(?:''|\"\")"), e.querySelectorAll(":enabled").length || d.push(":enabled", ":disabled"), e.querySelectorAll("*,:x"), d.push(",.*:") })), (n.matchesSelector = Q.test(m = f.webkitMatchesSelector || f.mozMatchesSelector || f.oMatchesSelector || f.msMatchesSelector)) && ut(function (e) { n.disconnectedMatch = m.call(e, "div"), m.call(e, "[s!='']:x"), g.push("!=", I) }), d = d.length && RegExp(d.join("|")), g = g.length && RegExp(g.join("|")), y = Q.test(f.contains) || f.compareDocumentPosition ? function (e, t) { var n = 9 === e.nodeType ? e.documentElement : e, r = t && t.parentNode; return e === r || !(!r || 1 !== r.nodeType || !(n.contains ? n.contains(r) : e.compareDocumentPosition && 16 & e.compareDocumentPosition(r))) } : function (e, t) { if (t) while (t = t.parentNode) if (t === e) return !0; return !1 }, S = f.compareDocumentPosition ? function (e, r) { if (e === r) return E = !0, 0; var i = r.compareDocumentPosition && e.compareDocumentPosition && e.compareDocumentPosition(r); return i ? 1 & i || !n.sortDetached && r.compareDocumentPosition(e) === i ? e === t || y(b, e) ? -1 : r === t || y(b, r) ? 1 : l ? P.call(l, e) - P.call(l, r) : 0 : 4 & i ? -1 : 1 : e.compareDocumentPosition ? -1 : 1 } : function (e, n) { var r, i = 0, o = e.parentNode, s = n.parentNode, a = [e], u = [n]; if (e === n) return E = !0, 0; if (!o || !s) return e === t ? -1 : n === t ? 1 : o ? -1 : s ? 1 : l ? P.call(l, e) - P.call(l, n) : 0; if (o === s) return ct(e, n); r = e; while (r = r.parentNode) a.unshift(r); r = n; while (r = r.parentNode) u.unshift(r); while (a[i] === u[i]) i++; return i ? ct(a[i], u[i]) : a[i] === b ? -1 : u[i] === b ? 1 : 0 }, t) : p }, ot.matches = function (e, t) { return ot(e, null, null, t) }, ot.matchesSelector = function (e, t) { if ((e.ownerDocument || e) !== p && c(e), t = t.replace(Y, "='$1']"), !(!n.matchesSelector || !h || g && g.test(t) || d && d.test(t))) try { var r = m.call(e, t); if (r || n.disconnectedMatch || e.document && 11 !== e.document.nodeType) return r } catch (i) { } return ot(t, p, null, [e]).length > 0 }, ot.contains = function (e, t) { return (e.ownerDocument || e) !== p && c(e), y(e, t) }, ot.attr = function (e, t) { (e.ownerDocument || e) !== p && c(e); var r = i.attrHandle[t.toLowerCase()], o = r && A.call(i.attrHandle, t.toLowerCase()) ? r(e, t, !h) : undefined; return o === undefined ? n.attributes || !h ? e.getAttribute(t) : (o = e.getAttributeNode(t)) && o.specified ? o.value : null : o }, ot.error = function (e) { throw Error("Syntax error, unrecognized expression: " + e) }, ot.uniqueSort = function (e) { var t, r = [], i = 0, o = 0; if (E = !n.detectDuplicates, l = !n.sortStable && e.slice(0), e.sort(S), E) { while (t = e[o++]) t === e[o] && (i = r.push(o)); while (i--) e.splice(r[i], 1) } return e }, o = ot.getText = function (e) { var t, n = "", r = 0, i = e.nodeType; if (i) { if (1 === i || 9 === i || 11 === i) { if ("string" == typeof e.textContent) return e.textContent; for (e = e.firstChild; e; e = e.nextSibling) n += o(e) } else if (3 === i || 4 === i) return e.nodeValue } else for (; t = e[r]; r++) n += o(t); return n }, i = ot.selectors = { cacheLength: 50, createPseudo: at, match: J, attrHandle: {}, find: {}, relative: { ">": { dir: "parentNode", first: !0 }, " ": { dir: "parentNode" }, "+": { dir: "previousSibling", first: !0 }, "~": { dir: "previousSibling" } }, preFilter: { ATTR: function (e) { return e[1] = e[1].replace(nt, rt), e[3] = (e[4] || e[5] || "").replace(nt, rt), "~=" === e[2] && (e[3] = " " + e[3] + " "), e.slice(0, 4) }, CHILD: function (e) { return e[1] = e[1].toLowerCase(), "nth" === e[1].slice(0, 3) ? (e[3] || ot.error(e[0]), e[4] = +(e[4] ? e[5] + (e[6] || 1) : 2 * ("even" === e[3] || "odd" === e[3])), e[5] = +(e[7] + e[8] || "odd" === e[3])) : e[3] && ot.error(e[0]), e }, PSEUDO: function (e) { var t, n = !e[5] && e[2]; return J.CHILD.test(e[0]) ? null : (e[3] && e[4] !== undefined ? e[2] = e[4] : n && V.test(n) && (t = gt(n, !0)) && (t = n.indexOf(")", n.length - t) - n.length) && (e[0] = e[0].slice(0, t), e[2] = n.slice(0, t)), e.slice(0, 3)) } }, filter: { TAG: function (e) { var t = e.replace(nt, rt).toLowerCase(); return "*" === e ? function () { return !0 } : function (e) { return e.nodeName && e.nodeName.toLowerCase() === t } }, CLASS: function (e) { var t = C[e + " "]; return t || (t = RegExp("(^|" + M + ")" + e + "(" + M + "|$)")) && C(e, function (e) { return t.test("string" == typeof e.className && e.className || typeof e.getAttribute !== j && e.getAttribute("class") || "") }) }, ATTR: function (e, t, n) { return function (r) { var i = ot.attr(r, e); return null == i ? "!=" === t : t ? (i += "", "=" === t ? i === n : "!=" === t ? i !== n : "^=" === t ? n && 0 === i.indexOf(n) : "*=" === t ? n && i.indexOf(n) > -1 : "$=" === t ? n && i.slice(-n.length) === n : "~=" === t ? (" " + i + " ").indexOf(n) > -1 : "|=" === t ? i === n || i.slice(0, n.length + 1) === n + "-" : !1) : !0 } }, CHILD: function (e, t, n, r, i) { var o = "nth" !== e.slice(0, 3), s = "last" !== e.slice(-4), a = "of-type" === t; return 1 === r && 0 === i ? function (e) { return !!e.parentNode } : function (t, n, u) { var l, c, p, f, h, d, g = o !== s ? "nextSibling" : "previousSibling", m = t.parentNode, y = a && t.nodeName.toLowerCase(), x = !u && !a; if (m) { if (o) { while (g) { p = t; while (p = p[g]) if (a ? p.nodeName.toLowerCase() === y : 1 === p.nodeType) return !1; d = g = "only" === e && !d && "nextSibling" } return !0 } if (d = [s ? m.firstChild : m.lastChild], s && x) { c = m[v] || (m[v] = {}), l = c[e] || [], h = l[0] === w && l[1], f = l[0] === w && l[2], p = h && m.childNodes[h]; while (p = ++h && p && p[g] || (f = h = 0) || d.pop()) if (1 === p.nodeType && ++f && p === t) { c[e] = [w, h, f]; break } } else if (x && (l = (t[v] || (t[v] = {}))[e]) && l[0] === w) f = l[1]; else while (p = ++h && p && p[g] || (f = h = 0) || d.pop()) if ((a ? p.nodeName.toLowerCase() === y : 1 === p.nodeType) && ++f && (x && ((p[v] || (p[v] = {}))[e] = [w, f]), p === t)) break; return f -= i, f === r || 0 === f % r && f / r >= 0 } } }, PSEUDO: function (e, t) { var n, r = i.pseudos[e] || i.setFilters[e.toLowerCase()] || ot.error("unsupported pseudo: " + e); return r[v] ? r(t) : r.length > 1 ? (n = [e, e, "", t], i.setFilters.hasOwnProperty(e.toLowerCase()) ? at(function (e, n) { var i, o = r(e, t), s = o.length; while (s--) i = P.call(e, o[s]), e[i] = !(n[i] = o[s]) }) : function (e) { return r(e, 0, n) }) : r } }, pseudos: { not: at(function (e) { var t = [], n = [], r = a(e.replace(z, "$1")); return r[v] ? at(function (e, t, n, i) { var o, s = r(e, null, i, []), a = e.length; while (a--) (o = s[a]) && (e[a] = !(t[a] = o)) }) : function (e, i, o) { return t[0] = e, r(t, null, o, n), !n.pop() } }), has: at(function (e) { return function (t) { return ot(e, t).length > 0 } }), contains: at(function (e) { return function (t) { return (t.textContent || t.innerText || o(t)).indexOf(e) > -1 } }), lang: at(function (e) { return G.test(e || "") || ot.error("unsupported lang: " + e), e = e.replace(nt, rt).toLowerCase(), function (t) { var n; do if (n = h ? t.lang : t.getAttribute("xml:lang") || t.getAttribute("lang")) return n = n.toLowerCase(), n === e || 0 === n.indexOf(e + "-"); while ((t = t.parentNode) && 1 === t.nodeType); return !1 } }), target: function (t) { var n = e.location && e.location.hash; return n && n.slice(1) === t.id }, root: function (e) { return e === f }, focus: function (e) { return e === p.activeElement && (!p.hasFocus || p.hasFocus()) && !!(e.type || e.href || ~e.tabIndex) }, enabled: function (e) { return e.disabled === !1 }, disabled: function (e) { return e.disabled === !0 }, checked: function (e) { var t = e.nodeName.toLowerCase(); return "input" === t && !!e.checked || "option" === t && !!e.selected }, selected: function (e) { return e.parentNode && e.parentNode.selectedIndex, e.selected === !0 }, empty: function (e) { for (e = e.firstChild; e; e = e.nextSibling) if (e.nodeName > "@" || 3 === e.nodeType || 4 === e.nodeType) return !1; return !0 }, parent: function (e) { return !i.pseudos.empty(e) }, header: function (e) { return et.test(e.nodeName) }, input: function (e) { return Z.test(e.nodeName) }, button: function (e) { var t = e.nodeName.toLowerCase(); return "input" === t && "button" === e.type || "button" === t }, text: function (e) { var t; return "input" === e.nodeName.toLowerCase() && "text" === e.type && (null == (t = e.getAttribute("type")) || t.toLowerCase() === e.type) }, first: ht(function () { return [0] }), last: ht(function (e, t) { return [t - 1] }), eq: ht(function (e, t, n) { return [0 > n ? n + t : n] }), even: ht(function (e, t) { var n = 0; for (; t > n; n += 2) e.push(n); return e }), odd: ht(function (e, t) { var n = 1; for (; t > n; n += 2) e.push(n); return e }), lt: ht(function (e, t, n) { var r = 0 > n ? n + t : n; for (; --r >= 0;) e.push(r); return e }), gt: ht(function (e, t, n) { var r = 0 > n ? n + t : n; for (; t > ++r;) e.push(r); return e }) } }, i.pseudos.nth = i.pseudos.eq; for (t in { radio: !0, checkbox: !0, file: !0, password: !0, image: !0 }) i.pseudos[t] = pt(t); for (t in { submit: !0, reset: !0 }) i.pseudos[t] = ft(t); function dt() { } dt.prototype = i.filters = i.pseudos, i.setFilters = new dt; function gt(e, t) { var n, r, o, s, a, u, l, c = k[e + " "]; if (c) return t ? 0 : c.slice(0); a = e, u = [], l = i.preFilter; while (a) { (!n || (r = _.exec(a))) && (r && (a = a.slice(r[0].length) || a), u.push(o = [])), n = !1, (r = X.exec(a)) && (n = r.shift(), o.push({ value: n, type: r[0].replace(z, " ") }), a = a.slice(n.length)); for (s in i.filter) !(r = J[s].exec(a)) || l[s] && !(r = l[s](r)) || (n = r.shift(), o.push({ value: n, type: s, matches: r }), a = a.slice(n.length)); if (!n) break } return t ? a.length : a ? ot.error(e) : k(e, u).slice(0) } function mt(e) { var t = 0, n = e.length, r = ""; for (; n > t; t++) r += e[t].value; return r } function yt(e, t, n) { var i = t.dir, o = n && "parentNode" === i, s = T++; return t.first ? function (t, n, r) { while (t = t[i]) if (1 === t.nodeType || o) return e(t, n, r) } : function (t, n, a) { var u, l, c, p = w + " " + s; if (a) { while (t = t[i]) if ((1 === t.nodeType || o) && e(t, n, a)) return !0 } else while (t = t[i]) if (1 === t.nodeType || o) if (c = t[v] || (t[v] = {}), (l = c[i]) && l[0] === p) { if ((u = l[1]) === !0 || u === r) return u === !0 } else if (l = c[i] = [p], l[1] = e(t, n, a) || r, l[1] === !0) return !0 } } function vt(e) { return e.length > 1 ? function (t, n, r) { var i = e.length; while (i--) if (!e[i](t, n, r)) return !1; return !0 } : e[0] } function xt(e, t, n, r, i) { var o, s = [], a = 0, u = e.length, l = null != t; for (; u > a; a++) (o = e[a]) && (!n || n(o, r, i)) && (s.push(o), l && t.push(a)); return s } function bt(e, t, n, r, i, o) { return r && !r[v] && (r = bt(r)), i && !i[v] && (i = bt(i, o)), at(function (o, s, a, u) { var l, c, p, f = [], h = [], d = s.length, g = o || Ct(t || "*", a.nodeType ? [a] : a, []), m = !e || !o && t ? g : xt(g, f, e, a, u), y = n ? i || (o ? e : d || r) ? [] : s : m; if (n && n(m, y, a, u), r) { l = xt(y, h), r(l, [], a, u), c = l.length; while (c--) (p = l[c]) && (y[h[c]] = !(m[h[c]] = p)) } if (o) { if (i || e) { if (i) { l = [], c = y.length; while (c--) (p = y[c]) && l.push(m[c] = p); i(null, y = [], l, u) } c = y.length; while (c--) (p = y[c]) && (l = i ? P.call(o, p) : f[c]) > -1 && (o[l] = !(s[l] = p)) } } else y = xt(y === s ? y.splice(d, y.length) : y), i ? i(null, s, y, u) : O.apply(s, y) }) } function wt(e) { var t, n, r, o = e.length, s = i.relative[e[0].type], a = s || i.relative[" "], l = s ? 1 : 0, c = yt(function (e) { return e === t }, a, !0), p = yt(function (e) { return P.call(t, e) > -1 }, a, !0), f = [function (e, n, r) { return !s && (r || n !== u) || ((t = n).nodeType ? c(e, n, r) : p(e, n, r)) }]; for (; o > l; l++) if (n = i.relative[e[l].type]) f = [yt(vt(f), n)]; else { if (n = i.filter[e[l].type].apply(null, e[l].matches), n[v]) { for (r = ++l; o > r; r++) if (i.relative[e[r].type]) break; return bt(l > 1 && vt(f), l > 1 && mt(e.slice(0, l - 1).concat({ value: " " === e[l - 2].type ? "*" : "" })).replace(z, "$1"), n, r > l && wt(e.slice(l, r)), o > r && wt(e = e.slice(r)), o > r && mt(e)) } f.push(n) } return vt(f) } function Tt(e, t) { var n = 0, o = t.length > 0, s = e.length > 0, a = function (a, l, c, f, h) { var d, g, m, y = [], v = 0, x = "0", b = a && [], T = null != h, C = u, k = a || s && i.find.TAG("*", h && l.parentNode || l), N = w += null == C ? 1 : Math.random() || .1; for (T && (u = l !== p && l, r = n) ; null != (d = k[x]) ; x++) { if (s && d) { g = 0; while (m = e[g++]) if (m(d, l, c)) { f.push(d); break } T && (w = N, r = ++n) } o && ((d = !m && d) && v--, a && b.push(d)) } if (v += x, o && x !== v) { g = 0; while (m = t[g++]) m(b, y, l, c); if (a) { if (v > 0) while (x--) b[x] || y[x] || (y[x] = q.call(f)); y = xt(y) } O.apply(f, y), T && !a && y.length > 0 && v + t.length > 1 && ot.uniqueSort(f) } return T && (w = N, u = C), b }; return o ? at(a) : a } a = ot.compile = function (e, t) { var n, r = [], i = [], o = N[e + " "]; if (!o) { t || (t = gt(e)), n = t.length; while (n--) o = wt(t[n]), o[v] ? r.push(o) : i.push(o); o = N(e, Tt(i, r)) } return o }; function Ct(e, t, n) { var r = 0, i = t.length; for (; i > r; r++) ot(e, t[r], n); return n } function kt(e, t, r, o) { var s, u, l, c, p, f = gt(e); if (!o && 1 === f.length) { if (u = f[0] = f[0].slice(0), u.length > 2 && "ID" === (l = u[0]).type && n.getById && 9 === t.nodeType && h && i.relative[u[1].type]) { if (t = (i.find.ID(l.matches[0].replace(nt, rt), t) || [])[0], !t) return r; e = e.slice(u.shift().value.length) } s = J.needsContext.test(e) ? 0 : u.length; while (s--) { if (l = u[s], i.relative[c = l.type]) break; if ((p = i.find[c]) && (o = p(l.matches[0].replace(nt, rt), U.test(u[0].type) && t.parentNode || t))) { if (u.splice(s, 1), e = o.length && mt(u), !e) return O.apply(r, o), r; break } } } return a(e, f)(o, t, !h, r, U.test(e)), r } n.sortStable = v.split("").sort(S).join("") === v, n.detectDuplicates = E, c(), n.sortDetached = ut(function (e) { return 1 & e.compareDocumentPosition(p.createElement("div")) }), ut(function (e) { return e.innerHTML = "", "#" === e.firstChild.getAttribute("href") }) || lt("type|href|height|width", function (e, t, n) { return n ? undefined : e.getAttribute(t, "type" === t.toLowerCase() ? 1 : 2) }), n.attributes && ut(function (e) { return e.innerHTML = "", e.firstChild.setAttribute("value", ""), "" === e.firstChild.getAttribute("value") }) || lt("value", function (e, t, n) { return n || "input" !== e.nodeName.toLowerCase() ? undefined : e.defaultValue }), ut(function (e) { return null == e.getAttribute("disabled") }) || lt(R, function (e, t, n) { var r; return n ? undefined : (r = e.getAttributeNode(t)) && r.specified ? r.value : e[t] === !0 ? t.toLowerCase() : null }), x.find = ot, x.expr = ot.selectors, x.expr[":"] = x.expr.pseudos, x.unique = ot.uniqueSort, x.text = ot.getText, x.isXMLDoc = ot.isXML, x.contains = ot.contains }(e); var D = {}; function A(e) { var t = D[e] = {}; return x.each(e.match(w) || [], function (e, n) { t[n] = !0 }), t } x.Callbacks = function (e) { e = "string" == typeof e ? D[e] || A(e) : x.extend({}, e); var t, n, r, i, o, s, a = [], u = !e.once && [], l = function (p) { for (t = e.memory && p, n = !0, s = i || 0, i = 0, o = a.length, r = !0; a && o > s; s++) if (a[s].apply(p[0], p[1]) === !1 && e.stopOnFalse) { t = !1; break } r = !1, a && (u ? u.length && l(u.shift()) : t ? a = [] : c.disable()) }, c = { add: function () { if (a) { var n = a.length; (function s(t) { x.each(t, function (t, n) { var r = x.type(n); "function" === r ? e.unique && c.has(n) || a.push(n) : n && n.length && "string" !== r && s(n) }) })(arguments), r ? o = a.length : t && (i = n, l(t)) } return this }, remove: function () { return a && x.each(arguments, function (e, t) { var n; while ((n = x.inArray(t, a, n)) > -1) a.splice(n, 1), r && (o >= n && o--, s >= n && s--) }), this }, has: function (e) { return e ? x.inArray(e, a) > -1 : !(!a || !a.length) }, empty: function () { return a = [], o = 0, this }, disable: function () { return a = u = t = undefined, this }, disabled: function () { return !a }, lock: function () { return u = undefined, t || c.disable(), this }, locked: function () { return !u }, fireWith: function (e, t) { return !a || n && !u || (t = t || [], t = [e, t.slice ? t.slice() : t], r ? u.push(t) : l(t)), this }, fire: function () { return c.fireWith(this, arguments), this }, fired: function () { return !!n } }; return c }, x.extend({ Deferred: function (e) { var t = [["resolve", "done", x.Callbacks("once memory"), "resolved"], ["reject", "fail", x.Callbacks("once memory"), "rejected"], ["notify", "progress", x.Callbacks("memory")]], n = "pending", r = { state: function () { return n }, always: function () { return i.done(arguments).fail(arguments), this }, then: function () { var e = arguments; return x.Deferred(function (n) { x.each(t, function (t, o) { var s = o[0], a = x.isFunction(e[t]) && e[t]; i[o[1]](function () { var e = a && a.apply(this, arguments); e && x.isFunction(e.promise) ? e.promise().done(n.resolve).fail(n.reject).progress(n.notify) : n[s + "With"](this === r ? n.promise() : this, a ? [e] : arguments) }) }), e = null }).promise() }, promise: function (e) { return null != e ? x.extend(e, r) : r } }, i = {}; return r.pipe = r.then, x.each(t, function (e, o) { var s = o[2], a = o[3]; r[o[1]] = s.add, a && s.add(function () { n = a }, t[1 ^ e][2].disable, t[2][2].lock), i[o[0]] = function () { return i[o[0] + "With"](this === i ? r : this, arguments), this }, i[o[0] + "With"] = s.fireWith }), r.promise(i), e && e.call(i, i), i }, when: function (e) { var t = 0, n = d.call(arguments), r = n.length, i = 1 !== r || e && x.isFunction(e.promise) ? r : 0, o = 1 === i ? e : x.Deferred(), s = function (e, t, n) { return function (r) { t[e] = this, n[e] = arguments.length > 1 ? d.call(arguments) : r, n === a ? o.notifyWith(t, n) : --i || o.resolveWith(t, n) } }, a, u, l; if (r > 1) for (a = Array(r), u = Array(r), l = Array(r) ; r > t; t++) n[t] && x.isFunction(n[t].promise) ? n[t].promise().done(s(t, l, n)).fail(o.reject).progress(s(t, u, a)) : --i; return i || o.resolveWith(l, n), o.promise() } }), x.support = function (t) { var n = o.createElement("input"), r = o.createDocumentFragment(), i = o.createElement("div"), s = o.createElement("select"), a = s.appendChild(o.createElement("option")); return n.type ? (n.type = "checkbox", t.checkOn = "" !== n.value, t.optSelected = a.selected, t.reliableMarginRight = !0, t.boxSizingReliable = !0, t.pixelPosition = !1, n.checked = !0, t.noCloneChecked = n.cloneNode(!0).checked, s.disabled = !0, t.optDisabled = !a.disabled, n = o.createElement("input"), n.value = "t", n.type = "radio", t.radioValue = "t" === n.value, n.setAttribute("checked", "t"), n.setAttribute("name", "t"), r.appendChild(n), t.checkClone = r.cloneNode(!0).cloneNode(!0).lastChild.checked, t.focusinBubbles = "onfocusin" in e, i.style.backgroundClip = "content-box", i.cloneNode(!0).style.backgroundClip = "", t.clearCloneStyle = "content-box" === i.style.backgroundClip, x(function () { var n, r, s = "padding:0;margin:0;border:0;display:block;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box", a = o.getElementsByTagName("body")[0]; a && (n = o.createElement("div"), n.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px", a.appendChild(n).appendChild(i), i.innerHTML = "", i.style.cssText = "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%", x.swap(a, null != a.style.zoom ? { zoom: 1 } : {}, function () { t.boxSizing = 4 === i.offsetWidth }), e.getComputedStyle && (t.pixelPosition = "1%" !== (e.getComputedStyle(i, null) || {}).top, t.boxSizingReliable = "4px" === (e.getComputedStyle(i, null) || { width: "4px" }).width, r = i.appendChild(o.createElement("div")), r.style.cssText = i.style.cssText = s, r.style.marginRight = r.style.width = "0", i.style.width = "1px", t.reliableMarginRight = !parseFloat((e.getComputedStyle(r, null) || {}).marginRight)), a.removeChild(n)) }), t) : t }({}); var L, q, H = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/, O = /([A-Z])/g; function F() { Object.defineProperty(this.cache = {}, 0, { get: function () { return {} } }), this.expando = x.expando + Math.random() } F.uid = 1, F.accepts = function (e) { return e.nodeType ? 1 === e.nodeType || 9 === e.nodeType : !0 }, F.prototype = { key: function (e) { if (!F.accepts(e)) return 0; var t = {}, n = e[this.expando]; if (!n) { n = F.uid++; try { t[this.expando] = { value: n }, Object.defineProperties(e, t) } catch (r) { t[this.expando] = n, x.extend(e, t) } } return this.cache[n] || (this.cache[n] = {}), n }, set: function (e, t, n) { var r, i = this.key(e), o = this.cache[i]; if ("string" == typeof t) o[t] = n; else if (x.isEmptyObject(o)) x.extend(this.cache[i], t); else for (r in t) o[r] = t[r]; return o }, get: function (e, t) { var n = this.cache[this.key(e)]; return t === undefined ? n : n[t] }, access: function (e, t, n) { var r; return t === undefined || t && "string" == typeof t && n === undefined ? (r = this.get(e, t), r !== undefined ? r : this.get(e, x.camelCase(t))) : (this.set(e, t, n), n !== undefined ? n : t) }, remove: function (e, t) { var n, r, i, o = this.key(e), s = this.cache[o]; if (t === undefined) this.cache[o] = {}; else { x.isArray(t) ? r = t.concat(t.map(x.camelCase)) : (i = x.camelCase(t), t in s ? r = [t, i] : (r = i, r = r in s ? [r] : r.match(w) || [])), n = r.length; while (n--) delete s[r[n]] } }, hasData: function (e) { return !x.isEmptyObject(this.cache[e[this.expando]] || {}) }, discard: function (e) { e[this.expando] && delete this.cache[e[this.expando]] } }, L = new F, q = new F, x.extend({ acceptData: F.accepts, hasData: function (e) { return L.hasData(e) || q.hasData(e) }, data: function (e, t, n) { return L.access(e, t, n) }, removeData: function (e, t) { L.remove(e, t) }, _data: function (e, t, n) { return q.access(e, t, n) }, _removeData: function (e, t) { q.remove(e, t) } }), x.fn.extend({ data: function (e, t) { var n, r, i = this[0], o = 0, s = null; if (e === undefined) { if (this.length && (s = L.get(i), 1 === i.nodeType && !q.get(i, "hasDataAttrs"))) { for (n = i.attributes; n.length > o; o++) r = n[o].name, 0 === r.indexOf("data-") && (r = x.camelCase(r.slice(5)), P(i, r, s[r])); q.set(i, "hasDataAttrs", !0) } return s } return "object" == typeof e ? this.each(function () { L.set(this, e) }) : x.access(this, function (t) { var n, r = x.camelCase(e); if (i && t === undefined) { if (n = L.get(i, e), n !== undefined) return n; if (n = L.get(i, r), n !== undefined) return n; if (n = P(i, r, undefined), n !== undefined) return n } else this.each(function () { var n = L.get(this, r); L.set(this, r, t), -1 !== e.indexOf("-") && n !== undefined && L.set(this, e, t) }) }, null, t, arguments.length > 1, null, !0) }, removeData: function (e) { return this.each(function () { L.remove(this, e) }) } }); function P(e, t, n) { var r; if (n === undefined && 1 === e.nodeType) if (r = "data-" + t.replace(O, "-$1").toLowerCase(), n = e.getAttribute(r), "string" == typeof n) { try { n = "true" === n ? !0 : "false" === n ? !1 : "null" === n ? null : +n + "" === n ? +n : H.test(n) ? JSON.parse(n) : n } catch (i) { } L.set(e, t, n) } else n = undefined; return n } x.extend({ diff --git a/src/Umbraco.Web.UI.Client/lib/umbraco/LegacyUmbClientMgr.js b/src/Umbraco.Web.UI.Client/lib/umbraco/LegacyUmbClientMgr.js index e75d75494e..f3f58c7446 100644 --- a/src/Umbraco.Web.UI.Client/lib/umbraco/LegacyUmbClientMgr.js +++ b/src/Umbraco.Web.UI.Client/lib/umbraco/LegacyUmbClientMgr.js @@ -1,6 +1,19 @@ - + //TODO: WE NEED TO CONVERT ALL OF THESE METHODS TO PROXY TO OUR APPLICATION SINCE MANY CUSTOM APPS USE THIS! +//TEST to mock iframe, this intercepts calls directly +//to the old iframe, and funnels requests to angular directly +var right = {document: {location: {}}}; +Object.defineProperty(right.document.location, "href", { + get: function() { + return this._href ? this._href : ""; + }, + set: function(value) { + this._href = value; + UmbClientMgr.contentFrame(value); + }, +}); + Umbraco.Sys.registerNamespace("Umbraco.Application"); (function($) { @@ -130,13 +143,13 @@ Umbraco.Sys.registerNamespace("Umbraco.Application"); contentFrame: function (strLocation) { if (!strLocation || strLocation == "") { - //SD: NOTE: We used to return the content iframe object but now I'm not sure we should do that ?! - - if (typeof top.right != "undefined") { - return top.right; - } - else { - return top; //return the current window if the content frame doesn't exist in the current context + //SD: NOTE: We used to return the content iframe object but now I'm not sure we should do that ?! + + if (typeof top.right != "undefined") { + return top.right; + } + else { + return top; //return the current window if the content frame doesn't exist in the current context } //return; } @@ -165,31 +178,31 @@ Umbraco.Sys.registerNamespace("Umbraco.Application"); //get our angular navigation service var injector = getRootInjector(); - var dialogService = injector.get("dialogService"); - + var dialogService = injector.get("dialogService"); + var self = this; //TODO: need to get the closeTriggers working for compatibility too somehow. - var dialog = dialogService.open({ + var dialog = dialogService.open({ template: url, width: width, height: height, iframe: true, show: true, - callback: function (result) { - - if (typeof onCloseCallback == "function") { - onCloseCallback.apply(self, [result]); - } - - dialog.hide(); - } - }); - - this._modal.push(dialog); - - return dialog; + callback: function (result) { + + if (typeof onCloseCallback == "function") { + onCloseCallback.apply(self, [result]); + } + + dialog.hide(); + } + }); + + this._modal.push(dialog); + + return dialog; }, closeModalWindow: function(rVal) { @@ -199,11 +212,11 @@ Umbraco.Sys.registerNamespace("Umbraco.Application"); // all legacy calls to closeModalWindow are expecting to just close the last opened one so we'll ensure // that this is still the case. - if (this._modal != null && this._modal.length > 0) { - dialogService.close(this._modal.pop(), { outVal: rVal }); - } - else { - dialogService.closeAll(rVal); + if (this._modal != null && this._modal.length > 0) { + dialogService.close(this._modal.pop(), { outVal: rVal }); + } + else { + dialogService.closeAll(rVal); } }, _debug: function(strMsg) { diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/sectionicon.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/sectionicon.directive.js index bb9939ae17..7f8ea83215 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/sectionicon.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/sectionicon.directive.js @@ -1,9 +1,9 @@ -angular.module("umbraco.directives") +angular.module("umbraco.directives") .directive('sectionIcon', function ($compile, iconHelper) { return { - restrict: 'E', - replace: true, - + restrict: 'E', + replace: true, + link: function (scope, element, attrs) { var icon = attrs.icon; @@ -13,13 +13,18 @@ element.html(""); } else if (iconHelper.isFileBasedIcon(icon)) { + var convert = iconHelper.convertFromLegacyImage(icon); + if(convert){ + element.html(""); + }else{ + element.html(""); + } //it's a file, normally legacy so look in the icon tray images - element.html(""); } else { //it's normal - element.html(""); - } + element.html(""); + } } }; }); \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/umbheader.directive.js b/src/Umbraco.Web.UI.Client/src/common/directives/umbheader.directive.js index de10465b81..032ef08ab1 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/umbheader.directive.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/umbheader.directive.js @@ -12,9 +12,40 @@ angular.module("umbraco.directives") }, link: function (scope, iElement, iAttrs) { + function collectFromDom(activeTab){ + var $panes = $('div.tab-content'); + $panes.find('.tab-pane').each(function (index) { + var $this = angular.element(this); + var id = $this.attr("rel"); + var label = $this.attr("label"); + var tab = {id: id, label: label, active: false}; + if(!activeTab){ + tab.active = true; + activeTab = tab; + } + + if ($this.attr("rel") === String(activeTab.id)) { + $this.addClass('active'); + } + else { + $this.removeClass('active'); + } + + //this is sorta hacky since we add a tab object to the tabs collection + //based on a dom element, there is most likely a better way... + if (label) { + scope.collectedTabs.push(tab); + } + }); + } + scope.showTabs = iAttrs.tabs ? true : false; scope.collectedTabs = []; + $timeout(function () { + collectFromDom(undefined); + }, 500); + //when the tabs change, we need to hack the planet a bit and force the first tab content to be active, //unfortunately twitter bootstrap tabs is not playing perfectly with angular. scope.$watch("tabs", function (newValue, oldValue) { @@ -32,33 +63,17 @@ angular.module("umbraco.directives") //set the flag //hasProcessed = true; - var $panes = $('div.tab-content'); + var activeTab = _.find(newValue, function (item) { return item.active; }); + //we need to do a timeout here so that the current sync operation can complete // and update the UI, then this will fire and the UI elements will be available. $timeout(function () { - $panes.find('.tab-pane').each(function (index) { - var $this = angular.element(this); - var id = $this.attr("rel"); - var label = $this.attr("data-label"); - - if ($this.attr("rel") === String(activeTab.id)) { - $this.addClass('active'); - } - else { - $this.removeClass('active'); - } - - //this is sorta hacky since we add a tab object to the tabs collection - //based on a dom element, there is most likely a better way... - if (label) { - scope.collectedTabs.push({id: id, label: label}); - } - }); - }); + collectFromDom(activeTab); + }, 500); }); } diff --git a/src/Umbraco.Web.UI.Client/src/common/services/navigation.service.js b/src/Umbraco.Web.UI.Client/src/common/services/navigation.service.js index 5e6d5c2ea4..b6ef1edd25 100644 --- a/src/Umbraco.Web.UI.Client/src/common/services/navigation.service.js +++ b/src/Umbraco.Web.UI.Client/src/common/services/navigation.service.js @@ -21,7 +21,10 @@ angular.module('umbraco.services') //TODO: would be nicer to set all of the options here first instead of implicitly below! var ui = {}; - + $rootScope.$on("closeDialogs", function(){ + + }); + function setMode(mode) { switch (mode) { case 'tree': diff --git a/src/Umbraco.Web.UI.Client/src/common/services/util.service.js b/src/Umbraco.Web.UI.Client/src/common/services/util.service.js index b311fb214c..321eb141b6 100644 --- a/src/Umbraco.Web.UI.Client/src/common/services/util.service.js +++ b/src/Umbraco.Web.UI.Client/src/common/services/util.service.js @@ -332,9 +332,14 @@ function iconHelper() { { oldIcon: ".sprTreeDeveloperCacheTypes", newIcon: "icon-box" }, { oldIcon: ".sprTreeDeveloperMacro", newIcon: "icon-cogs" }, { oldIcon: ".sprTreeDeveloperRegistry", newIcon: "icon-windows" }, - { oldIcon: ".sprTreeDeveloperPython", newIcon: "icon-linux" } + { oldIcon: ".sprTreeDeveloperPython", newIcon: "icon-linux" }, + { oldIcon: "images/tray/contour.png", newIcon: "icon-umb-contour" } ]; + var imageConverter = [ + {oldImage: "contour.png", newIcon: "icon-umb-contour"} + ]; + return { /** Used by the create dialogs for content/media types to format the data so that the thumbnails are styled properly */ @@ -415,6 +420,14 @@ function iconHelper() { } return icon; }, + + convertFromLegacyImage: function (icon) { + var found = _.find(imageConverter, function (item) { + return item.oldImage.toLowerCase() === icon.toLowerCase(); + }); + return (found ? found.newIcon : undefined); + }, + /** If we detect that the tree node has legacy icons that can be converted, this will convert them */ convertFromLegacyTreeNodeIcon: function (treeNode) { if (this.isLegacyTreeNodeIcon(treeNode)) { diff --git a/src/Umbraco.Web.UI.Client/src/less/dragdrop.less b/src/Umbraco.Web.UI.Client/src/less/dragdrop.less new file mode 100644 index 0000000000..afae4d4da3 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/less/dragdrop.less @@ -0,0 +1,36 @@ +body.dragging, body.dragging * { + cursor: move !important; +} + +.dragged { + position: absolute; + opacity: 0.5; + z-index: 2000; +} + +.umb-sort li{ + display: block; + margin: 5px; + padding: 5px; + border: 1px solid #CCC; + background: @grayLighter; +} + +.umb-sort li.placeholder { + position: relative; + margin: 0; + padding: 0; + border: none; +} +.umb-sort li.placeholder:before { + position: absolute; + content: ""; + width: 0; + height: 0; + margin-top: -5px; + left: -5px; + top: -4px; + border: 5px solid transparent; + border-left-color: red; + border-right: none; +} \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/less/helveticons.less b/src/Umbraco.Web.UI.Client/src/less/helveticons.less index f3132a0668..156eaba482 100644 --- a/src/Umbraco.Web.UI.Client/src/less/helveticons.less +++ b/src/Umbraco.Web.UI.Client/src/less/helveticons.less @@ -2,7 +2,6 @@ font-family: 'icomoon'; src:url('../fonts/helveticons/helveticons.eot'); src:url('../fonts/helveticons/helveticons.eot?#iefix') format('embedded-opentype'), - url('../fonts/helveticons/helveticons.woff') format('woff'), url('../fonts/helveticons/helveticons.ttf') format('truetype'), url('../fonts/helveticons/helveticons.svg#icomoon') format('svg'); font-weight: normal; @@ -94,9 +93,6 @@ i.small:before{ .icon-wall-plug:before { content: "\e014"; } -.icon-umb-members:before { - content: "\e015"; -} .icon-voice:before { content: "\e016"; } @@ -151,24 +147,28 @@ i.small:before{ .icon-umb-deploy:before { content: "\e027"; } -.icon-umb-contour:before { +.icon-umb-contour:before, .traycontent:before, { content: "\e028"; } -.icon-umb-settings:before { +.icon-umb-settings:before, .traysettings:before, { content: "\e029"; } -.icon-umb-users:before { +.icon-umb-users:before, .trayusers:before, { content: "\e02a"; } -.icon-umb-media:before { +.icon-umb-media:before, .traymedia:before, { content: "\e02b"; } -.icon-umb-content:before { +.icon-umb-content:before, .traycontent:before{ content: "\e02c"; } -.icon-umb-developer:before { +.icon-umb-developer:before, .traydeveloper:before, { content: "\e02d"; } +.icon-umb-members:before, .traymember:before { + content: "\e015"; +} + .icon-tv:before { content: "\e02e"; } diff --git a/src/Umbraco.Web.UI.Client/src/less/sections.less b/src/Umbraco.Web.UI.Client/src/less/sections.less index d830cdd892..d2be07b7c3 100644 --- a/src/Umbraco.Web.UI.Client/src/less/sections.less +++ b/src/Umbraco.Web.UI.Client/src/less/sections.less @@ -11,13 +11,10 @@ ul.sections { ul.sections li { border-bottom: 1px solid @grayDark; display: block; - padding: 0px; - height: 56px; - padding: 23px 0 0 0 } ul.sections li [class^="icon-"]:before, ul.sections li [class*=" icon-"]:before{ - font-size: 32px; + font-size: 24px; } ul.sections li a { @@ -25,24 +22,24 @@ ul.sections li a { text-decoration: none; font-size: 10px; text-align: center; - color: @grayLight; - -webkit-transition: color .2s linear; - -moz-transition: color .2s linear; - transition: color .2s linear; + color: @gray; + -webkit-transition: color .5s linear; + -moz-transition: color .5s linear; + transition: color .5s linear; + + padding-top: 15px; + padding-bottom: 15px; } ul.sections a span { display: block; - visibility: hidden; font-size: 10px; line-height: 1em; - -webkit-transition: color .2s linear; - -moz-transition: color .2s linear; - transition: color .2s linear; } -ul.sections:hover li a span { - visibility: visible; + +ul.sections:hover li a { + color: @grayLight; } @@ -57,6 +54,7 @@ ul.sections li.avatar { ul.sections li.avatar a { margin: 0 auto; + padding: 0; width: 40px; height: 40px; } @@ -71,38 +69,20 @@ ul.sections li.avatar a img { ul.sections li i { display: inline-block; - background-repeat: no-repeat; - background-position: 0 0; - width: 30px; - height: 30px +} + +ul.sections li a { + display: inline-block; + padding-left: 4px; + padding-right: 4px; } ul.sections li.current { border-left: 4px @orange solid; } -ul.sections li i.traycontent { - background-image: url(../img/applicationIcons/Umbraco_icons-02.svg); -} - -ul.sections li i.traymedia { - background-image: url(../img/applicationIcons/Umbraco_icons-03.svg); -} - -ul.sections li i.traysettings { - background-image: url(../img/applicationIcons/Umbraco_icons-05.svg); -} - -ul.sections li i.traydeveloper { - background-image: url(../img/applicationIcons/Umbraco_icons-01.svg); -} - -ul.sections li i.trayusers { - background-image: url(../img/applicationIcons/Umbraco_icons-04.svg); -} - -ul.sections li i.traymember { - background-image: url(../img/applicationIcons/Umbraco_icons-05.svg); +ul.sections li.current a{ + padding-left: 0px; } ul.sections li.help { @@ -115,9 +95,3 @@ ul.sections li.help { display: block; width: 100%; } - -ul.sections li.help a span { - - visibility: hidden;// remove when helvicons is ready -} - diff --git a/src/Umbraco.Web.UI.Client/src/views/common/main.controller.js b/src/Umbraco.Web.UI.Client/src/views/common/main.controller.js index 16f86f7eb5..66890f5b6e 100644 --- a/src/Umbraco.Web.UI.Client/src/views/common/main.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/common/main.controller.js @@ -36,9 +36,11 @@ function MainController($scope, $routeParams, $rootScope, $timeout, $http, $log, //only close dialogs if non-lin and non-buttons are clicked var el = event.target.nodeName; var pEl = event.target.parentElement.nodeName; + var close = $(event.target).closest("#navigation"); + var parents = $(event.target).parents("#navigation"); //SD: I've updated this so that we don't close the dialog when clicking inside of the dialog - if ($(event.target).closest("#navigation").length === 1) { + if (parents.length === 1) { return; } diff --git a/src/Umbraco.Web.UI.Client/src/views/common/navigation.controller.js b/src/Umbraco.Web.UI.Client/src/views/common/navigation.controller.js index aa6d58911b..4ab8df9059 100644 --- a/src/Umbraco.Web.UI.Client/src/views/common/navigation.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/common/navigation.controller.js @@ -38,7 +38,7 @@ function NavigationController($scope,$rootScope, $location, $log, $routeParams, //This reacts to clicks passed to the body element which emits a global call to close all dialogs $rootScope.$on("closeDialogs", function (event) { - if (navigationService.ui.stickyNavigation && (!event.target || $(event.target).parents(".umb-modalcolumn").size() == 0)) { + if (navigationService.ui.stickyNavigation) { navigationService.hideNavigation(); angularHelper.safeApply($scope); } diff --git a/src/Umbraco.Web.UI.Client/src/views/directives/umb-navigation.html b/src/Umbraco.Web.UI.Client/src/views/directives/umb-navigation.html index 0df1f53233..d4e4862ed7 100644 --- a/src/Umbraco.Web.UI.Client/src/views/directives/umb-navigation.html +++ b/src/Umbraco.Web.UI.Client/src/views/directives/umb-navigation.html @@ -21,7 +21,7 @@
  • - {{currentSection}} + Help
  • diff --git a/src/Umbraco.Web.UI.Client/src/web.config b/src/Umbraco.Web.UI.Client/src/web.config new file mode 100644 index 0000000000..6903c39608 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/src/web.config @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/src/Umbraco.Web.UI/Umbraco/Images/tray/contour.png b/src/Umbraco.Web.UI/Umbraco/Images/tray/contour.png new file mode 100644 index 0000000000..7a1b3e01dc Binary files /dev/null and b/src/Umbraco.Web.UI/Umbraco/Images/tray/contour.png differ diff --git a/src/Umbraco.Web.UI/Umbraco/Images/umbraco/icon_archive.png b/src/Umbraco.Web.UI/Umbraco/Images/umbraco/icon_archive.png new file mode 100644 index 0000000000..8443c23eb9 Binary files /dev/null and b/src/Umbraco.Web.UI/Umbraco/Images/umbraco/icon_archive.png differ diff --git a/src/Umbraco.Web.UI/Umbraco/Images/umbraco/icon_datasource.gif b/src/Umbraco.Web.UI/Umbraco/Images/umbraco/icon_datasource.gif new file mode 100644 index 0000000000..eff4528415 Binary files /dev/null and b/src/Umbraco.Web.UI/Umbraco/Images/umbraco/icon_datasource.gif differ diff --git a/src/Umbraco.Web.UI/Umbraco/Images/umbraco/icon_entries.gif b/src/Umbraco.Web.UI/Umbraco/Images/umbraco/icon_entries.gif new file mode 100644 index 0000000000..dcf36d972e Binary files /dev/null and b/src/Umbraco.Web.UI/Umbraco/Images/umbraco/icon_entries.gif differ diff --git a/src/Umbraco.Web.UI/Umbraco/Images/umbraco/icon_exportform.gif b/src/Umbraco.Web.UI/Umbraco/Images/umbraco/icon_exportform.gif new file mode 100644 index 0000000000..385e077d65 Binary files /dev/null and b/src/Umbraco.Web.UI/Umbraco/Images/umbraco/icon_exportform.gif differ diff --git a/src/Umbraco.Web.UI/Umbraco/Images/umbraco/icon_folder.gif b/src/Umbraco.Web.UI/Umbraco/Images/umbraco/icon_folder.gif new file mode 100644 index 0000000000..4d4fdc8e92 Binary files /dev/null and b/src/Umbraco.Web.UI/Umbraco/Images/umbraco/icon_folder.gif differ diff --git a/src/Umbraco.Web.UI/Umbraco/Images/umbraco/icon_form.gif b/src/Umbraco.Web.UI/Umbraco/Images/umbraco/icon_form.gif new file mode 100644 index 0000000000..2b49b1eb22 Binary files /dev/null and b/src/Umbraco.Web.UI/Umbraco/Images/umbraco/icon_form.gif differ diff --git a/src/Umbraco.Web.UI/Umbraco/Images/umbraco/icon_importform.gif b/src/Umbraco.Web.UI/Umbraco/Images/umbraco/icon_importform.gif new file mode 100644 index 0000000000..ac86897f75 Binary files /dev/null and b/src/Umbraco.Web.UI/Umbraco/Images/umbraco/icon_importform.gif differ diff --git a/src/Umbraco.Web.UI/Umbraco/Images/umbraco/icon_prevaluesource.gif b/src/Umbraco.Web.UI/Umbraco/Images/umbraco/icon_prevaluesource.gif new file mode 100644 index 0000000000..d40f332f55 Binary files /dev/null and b/src/Umbraco.Web.UI/Umbraco/Images/umbraco/icon_prevaluesource.gif differ diff --git a/src/Umbraco.Web.UI/Umbraco/Images/umbraco/icon_workflow.gif b/src/Umbraco.Web.UI/Umbraco/Images/umbraco/icon_workflow.gif new file mode 100644 index 0000000000..befcf396d3 Binary files /dev/null and b/src/Umbraco.Web.UI/Umbraco/Images/umbraco/icon_workflow.gif differ diff --git a/src/Umbraco.Web.UI/Umbraco/js/web.config b/src/Umbraco.Web.UI/Umbraco/js/web.config new file mode 100644 index 0000000000..6903c39608 --- /dev/null +++ b/src/Umbraco.Web.UI/Umbraco/js/web.config @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Analyzer.aspx b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Analyzer.aspx new file mode 100644 index 0000000000..a9991908a6 --- /dev/null +++ b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Analyzer.aspx @@ -0,0 +1,19 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Analyzer.aspx.cs" Inherits="Umbraco.Forms.UI.Pages.Analyzer" %> + + + + + + Untitled Page + + +
    +
    + + + + +
    +
    + + diff --git a/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Designer.asmx b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Designer.asmx new file mode 100644 index 0000000000..f6d3f8a1a6 --- /dev/null +++ b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Designer.asmx @@ -0,0 +1 @@ +<%@ WebService Language="C#" CodeBehind="Designer.asmx.cs" Class="UmbracoContour.Webservices.Designer" %> diff --git a/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/EntriesDashboard.ascx b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/EntriesDashboard.ascx new file mode 100644 index 0000000000..4353ff76c6 --- /dev/null +++ b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/EntriesDashboard.ascx @@ -0,0 +1,6 @@ +<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="EntriesDashboard.ascx.cs" Inherits="Umbraco.Forms.UI.Dashboard.EntriesDashboard" %> +<%@ Register Namespace="umbraco.uicontrols" Assembly="controls" TagPrefix="umb" %> + + + + \ No newline at end of file diff --git a/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/ExportFormEntries.aspx b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/ExportFormEntries.aspx new file mode 100644 index 0000000000..64b6408508 --- /dev/null +++ b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/ExportFormEntries.aspx @@ -0,0 +1,42 @@ +<%@ Page MasterPageFile="../../masterpages/umbracoPage.Master" Language="C#" AutoEventWireup="true" CodeBehind="ExportFormEntries.aspx.cs" Inherits="Umbraco.Forms.UI.Pages.ExportFormEntries" %> +<%@ Register Namespace="umbraco.uicontrols" Assembly="controls" TagPrefix="umb" %> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/FeedProxy.aspx b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/FeedProxy.aspx new file mode 100644 index 0000000000..c57ff9877c --- /dev/null +++ b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/FeedProxy.aspx @@ -0,0 +1,2 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="FeedProxy.aspx.cs" Inherits="Umbraco.Forms.UI.Pages.FeedProxy" %> +<%@ OutputCache Duration="1800" VaryByParam="url" %> diff --git a/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/FileProxy.aspx b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/FileProxy.aspx new file mode 100644 index 0000000000..755ddc246b --- /dev/null +++ b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/FileProxy.aspx @@ -0,0 +1 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="FileProxy.aspx.cs" Inherits="Umbraco.Forms.UI.Pages.FileProxy" %> diff --git a/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Forms.asmx b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Forms.asmx new file mode 100644 index 0000000000..31c6ab1299 --- /dev/null +++ b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Forms.asmx @@ -0,0 +1 @@ +<%@ WebService Language="C#" CodeBehind="Forms.asmx.cs" Class="UmbracoContour.Webservices.Forms" %> diff --git a/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/FormsDashboard.ascx b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/FormsDashboard.ascx new file mode 100644 index 0000000000..be81c0106d --- /dev/null +++ b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/FormsDashboard.ascx @@ -0,0 +1,271 @@ +<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="FormsDashboard.ascx.cs" + Inherits="Umbraco.Forms.UI.Dashboard.FormsDashboard" %> +<%@ Register Namespace="umbraco.uicontrols" Assembly="controls" TagPrefix="umb" %> + + + + + + + + + + +

    Thank you for trying out Umbraco Contour!

    +

    To purchase Umbraco Contour, simply go to the + Umbraco online shop and you're up and running in minutes!

    + +

    If you've already purchased Umbraco Contour, you can install your license + automatically by using your umbraco.org profile credentials below.

    + + + + + + + + + + + + + + + + +

    + +

    +
    +
    + + + +

    + Following licenses was found via your profile on umbraco.org: +

    +

    + +

    +

    + +

    +
    + +
    + + + + +

    Please choose the domain that should be used for this license (without www - for instance 'mysite.com')

    +

    Any subdomain will work with this license, ie. 'www.mysite.com', 'dev.mysite.com', 'staging.mysite.com'. In addition 'localhost' will always work.

    +
    + + +
    + +
    + + +

    + +

    +
    + +
    + + +
    +
    + +
    +
    + + +

    + Thank you for trying out Umbraco Contour +

    +

    + This version of Umbraco Contour is beta software, that means we + are not 100% done polishing the edges and some areas might be in need of some extra + care +

    +

    + Should you encounter any bugs or issues with using Umbraco Contour, please submit + a bug report to us, so we can fix it as fast as possible. +

    +

    + +

    +
    + + + + + + + + + None + + + + +

    + +

    +
    +
    + + + + + + + + + + + + +

    + Want to master Umbraco Contour ? Spend a couple of minutes learning som new tricks + by watching one of the many videos about using this product. And visit umbraco.tv for even more umbraco videos

    +
    + +
    + Loading... +
    +
    +
    +Umbraco Contour version <%= Umbraco.Forms.Core.Configuration.Version %> diff --git a/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/UmbracoContour.config b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/UmbracoContour.config new file mode 100644 index 0000000000..b217086867 --- /dev/null +++ b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/UmbracoContour.config @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Upgrade.aspx b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Upgrade.aspx new file mode 100644 index 0000000000..db2c4f7aa6 --- /dev/null +++ b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Upgrade.aspx @@ -0,0 +1,13 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Upgrade.aspx.cs" Inherits="Umbraco.Forms.UI.Pages.Upgrade" %> + + + + + + + + +

    Upgrade Contour from 1.x to 3.x successful/h1> + + + diff --git a/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/Comment form.ucf b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/Comment form.ucf new file mode 100644 index 0000000000..aec5cc04ce --- /dev/null +++ b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/Comment form.ucf @@ -0,0 +1,141 @@ + +
    + Comment + 2012-11-19T11:46:09.333 + NoIndicator + + false + false + {0} is mandatory + {0} is not valid + Thank you + 0 + false + false + true + false + + + +
    + + + + Name + + 0 + 0 + 0 + 00000000-0000-0000-0000-000000000000 +
    087ef1e5-ca08-4840-93b2-8fc5786f41fd
    + 7a307e8c-d592-4dd8-a6ba-0e711f4a9b2e + 3f92e01b-29e2-4a30-bf33-9df5580ed52c + true + + + + 00000000-0000-0000-0000-000000000000 + + + c0cc21c8-3983-4d34-bb3a-9af1c4637513 + 14ef362e-725f-47cf-94bd-1d2729cb530c + false + Show + All + + +
    + + + Email + + 1 + 0 + 0 + 00000000-0000-0000-0000-000000000000 +
    087ef1e5-ca08-4840-93b2-8fc5786f41fd
    +
    7a307e8c-d592-4dd8-a6ba-0e711f4a9b2e
    + 3f92e01b-29e2-4a30-bf33-9df5580ed52c + true + ^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$ + + + 00000000-0000-0000-0000-000000000000 + + + c4d63009-fb47-4bf2-b0ca-a7b4026269d8 + c25ee441-e0b9-4bda-8469-121d20c8d12c + false + Show + All + + +
    + + + Website + + 2 + 0 + 0 + 00000000-0000-0000-0000-000000000000 +
    087ef1e5-ca08-4840-93b2-8fc5786f41fd
    +
    7a307e8c-d592-4dd8-a6ba-0e711f4a9b2e
    + 3f92e01b-29e2-4a30-bf33-9df5580ed52c + false + (http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&amp;:/~\+#]*[\w\-\@?^=%&amp;/~\+#])? + + + 00000000-0000-0000-0000-000000000000 + + + 8d816c6b-b7c8-4cee-95a8-200c4c7701a4 + 9a427713-338a-4c5d-9562-4b2e04c1b292 + false + Show + All + + +
    + + + Comment + + 3 + 0 + 0 + 00000000-0000-0000-0000-000000000000 +
    087ef1e5-ca08-4840-93b2-8fc5786f41fd
    +
    7a307e8c-d592-4dd8-a6ba-0e711f4a9b2e
    + 023f09ac-1445-4bcb-b8fa-ab49f33bd046 + true + + + + 00000000-0000-0000-0000-000000000000 + + + df7f280c-988c-4d3c-8a2f-aecd4d2dcf12 + 329d6f2b-9756-4abb-abf7-ef4f0723b37b + false + Show + All + + +
    +
    + Your comment + 0 + 00000000-0000-0000-0000-000000000000 + 1d2a9d94-8e35-43c4-9127-d65edb03ef05 +
    +
    + Leave a comment + 0 + 00000000-0000-0000-0000-000000000000 +
    7a307e8c-d592-4dd8-a6ba-0e711f4a9b2e
    +
    +
    + 00000000-0000-0000-0000-000000000000 + 7a307e8c-d592-4dd8-a6ba-0e711f4a9b2e + \ No newline at end of file diff --git a/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/Contact form.ucf b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/Contact form.ucf new file mode 100644 index 0000000000..2c2de40a66 --- /dev/null +++ b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/Contact form.ucf @@ -0,0 +1,115 @@ + +
    + Contact + 2012-11-19T12:26:50.927 + NoIndicator + + false + false + {0} is mandatory + {0} is not valid + Thank you + 0 + false + false + true + false + + + +
    + + + + Name + + 0 + 0 + 0 + 00000000-0000-0000-0000-000000000000 +
    3dce7e6e-6b94-4b4f-9e43-58f1687d980b
    + 6f2903fc-e27a-4d68-88d7-8d948746a6fe + 3f92e01b-29e2-4a30-bf33-9df5580ed52c + true + + + + 00000000-0000-0000-0000-000000000000 + + + 7eb5cf20-0df9-4b6a-9e9e-0613525aa4dc + 5674fa29-4ae2-4090-a0ce-2a2e70c35dfc + false + Show + All + + +
    + + + Email + + 1 + 0 + 0 + 00000000-0000-0000-0000-000000000000 +
    3dce7e6e-6b94-4b4f-9e43-58f1687d980b
    +
    6f2903fc-e27a-4d68-88d7-8d948746a6fe
    + 3f92e01b-29e2-4a30-bf33-9df5580ed52c + true + ^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$ + + + 00000000-0000-0000-0000-000000000000 + + + 102477ed-50a8-4af6-a40b-b315e96fead4 + d222a759-d74e-4d6c-a6d5-23ffc4bda09b + false + Show + All + + +
    + + + Message + + 2 + 0 + 0 + 00000000-0000-0000-0000-000000000000 +
    3dce7e6e-6b94-4b4f-9e43-58f1687d980b
    +
    6f2903fc-e27a-4d68-88d7-8d948746a6fe
    + 023f09ac-1445-4bcb-b8fa-ab49f33bd046 + true + + + + 00000000-0000-0000-0000-000000000000 + + + 4949846c-bc24-49db-9bdd-b7c1eb6179c8 + 753ba791-0089-4342-8289-29e987518a35 + false + Show + All + + +
    +
    + Contact + 0 + 00000000-0000-0000-0000-000000000000 + 684d6d0a-11ba-4e22-a9fa-4a518c180835 +
    +
    + Contact + 0 + 00000000-0000-0000-0000-000000000000 +
    6f2903fc-e27a-4d68-88d7-8d948746a6fe
    +
    +
    + 00000000-0000-0000-0000-000000000000 + 6f2903fc-e27a-4d68-88d7-8d948746a6fe + \ No newline at end of file diff --git a/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/ContourForm.cshtml b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/ContourForm.cshtml new file mode 100644 index 0000000000..4c8e8b4e31 --- /dev/null +++ b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/ContourForm.cshtml @@ -0,0 +1,76 @@ +@inherits WebViewPage +@using Umbraco.Forms.Mvc.Models +@using Umbraco.Forms.Mvc.BusinessLogic +@using Umbraco.Forms.MVC.Extensions + +@if (Model.SubmitHandled) +{ +

    @Model.MessageOnSubmit

    +} +else +{ + Html.EnableClientValidation(); + Html.EnableUnobtrusiveJavaScript(); + + string dateFormat = Html.ConvertDateFormat(); + + + +
    + + @using (Html.BeginForm()) + { + @Html.AntiForgeryToken("UmbracoContourForm") + @Html.HiddenFor(x => Model.FormStep) + @Html.HiddenFor(x => Model.FormId) + @Html.HiddenFor(x => Model.RecordId) + + + if (Model.ShowValidationSummary) + { + @Html.ValidationSummary(false) + } + +
    +

    @Model.CurrentPage.Caption

    + @foreach (FieldsetViewModel fs in Model.CurrentPage.Fieldsets) + { +
    + @if (!string.IsNullOrEmpty(fs.Caption)) + { + + @fs.Caption + + } + @foreach (FieldViewModel f in fs.Fields) + { +
    + + + @Html.Partial(FieldViewResolver.GetFieldView(Model.FormId, f.FieldTypeName, f.Caption), f) + + @if (Model.ShowFieldValidaton) + { + @Html.ValidationMessage(f.Id) + } +
    + } + +
    + } +
    + } +

    + +

    +
    +} \ No newline at end of file diff --git a/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/FieldType.CheckBox.cshtml b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/FieldType.CheckBox.cshtml new file mode 100644 index 0000000000..ea4afa5d65 --- /dev/null +++ b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/FieldType.CheckBox.cshtml @@ -0,0 +1,8 @@ +@model Umbraco.Forms.Mvc.Models.FieldViewModel + data-val="true" data-val-requiredcb="@Model.RequiredErrorMessage"} + @if (Model.ContainsValue(true) || Model.ContainsValue("true") || Model.ContainsValue("on")) + {checked="checked"} + + /> + diff --git a/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/FieldType.CheckBoxList.cshtml b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/FieldType.CheckBoxList.cshtml new file mode 100644 index 0000000000..1676cb8c8d --- /dev/null +++ b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/FieldType.CheckBoxList.cshtml @@ -0,0 +1,14 @@ +@model Umbraco.Forms.Mvc.Models.FieldViewModel + +@foreach (Umbraco.Forms.Mvc.Models.PrevalueViewModel pv in Model.PreValues) +{ + + data-val="true" data-val-requiredlist="@Model.RequiredErrorMessage"} + @if (Model.ContainsValue(pv.Value)){checked="checked"}/> + +
    +} + +
    + diff --git a/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/FieldType.DatePicker.cshtml b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/FieldType.DatePicker.cshtml new file mode 100644 index 0000000000..1efbe2b268 --- /dev/null +++ b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/FieldType.DatePicker.cshtml @@ -0,0 +1,13 @@ +@model Umbraco.Forms.Mvc.Models.FieldViewModel +@{ + string val = string.Empty; + if (Model.ValueAsObject != null) + { + DateTime d; + d = (DateTime) Model.ValueAsObject; + val = d.ToShortDateString(); + } +} + data-val="true" data-val-required="@Model.RequiredErrorMessage"}} +/> \ No newline at end of file diff --git a/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/FieldType.DropDownList.cshtml b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/FieldType.DropDownList.cshtml new file mode 100644 index 0000000000..f1c59e59dd --- /dev/null +++ b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/FieldType.DropDownList.cshtml @@ -0,0 +1,13 @@ +@model Umbraco.Forms.Mvc.Models.FieldViewModel + diff --git a/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/FieldType.FileUpload.cshtml b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/FieldType.FileUpload.cshtml new file mode 100644 index 0000000000..f9139de655 --- /dev/null +++ b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/FieldType.FileUpload.cshtml @@ -0,0 +1,11 @@ +@model Umbraco.Forms.Mvc.Models.FieldViewModel + data-val="true" data-val-required="@Model.RequiredErrorMessage"} +/> + +@if (!string.IsNullOrEmpty(Model.Value)) +{ +
    + Show current file + +} diff --git a/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/FieldType.HiddenField.cshtml b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/FieldType.HiddenField.cshtml new file mode 100644 index 0000000000..d7b060a5c8 --- /dev/null +++ b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/FieldType.HiddenField.cshtml @@ -0,0 +1,4 @@ +@model Umbraco.Forms.Mvc.Models.FieldViewModel + + + diff --git a/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/FieldType.Password.cshtml b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/FieldType.Password.cshtml new file mode 100644 index 0000000000..4e3f4cecba --- /dev/null +++ b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/FieldType.Password.cshtml @@ -0,0 +1,8 @@ +@model Umbraco.Forms.Mvc.Models.FieldViewModel + + +data-val="true"}} +@{if (Model.Mandatory) { data-val-required="@Model.RequiredErrorMessage"}} +@{if (Model.Validate) { data-val-regex="@Model.InvalidErrorMessage" data-regex="@Model.Regex"}} +/> diff --git a/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/FieldType.PasswordField.cshtml b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/FieldType.PasswordField.cshtml new file mode 100644 index 0000000000..f5a57f24f8 --- /dev/null +++ b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/FieldType.PasswordField.cshtml @@ -0,0 +1,6 @@ +@model Umbraco.Forms.Mvc.Models.FieldViewModel +data-val="true"}} +@{if (Model.Mandatory) { data-val-required="@Model.RequiredErrorMessage"}} +@{if (Model.Validate) { data-val-regex="@Model.InvalidErrorMessage" data-regex="@Model.Regex"}} +/> diff --git a/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/FieldType.RadioButtonList.cshtml b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/FieldType.RadioButtonList.cshtml new file mode 100644 index 0000000000..c0cc0d5ec4 --- /dev/null +++ b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/FieldType.RadioButtonList.cshtml @@ -0,0 +1,11 @@ +@model Umbraco.Forms.Mvc.Models.FieldViewModel + +@foreach (Umbraco.Forms.Mvc.Models.PrevalueViewModel pv in Model.PreValues) +{ + data-val="true" data-val-requiredlist="@Model.RequiredErrorMessage"} + @if (Model.ContainsValue(pv.Value)){checked="checked"} /> + +
    +} +
    \ No newline at end of file diff --git a/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/FieldType.Textarea.cshtml b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/FieldType.Textarea.cshtml new file mode 100644 index 0000000000..38e0795ddc --- /dev/null +++ b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/FieldType.Textarea.cshtml @@ -0,0 +1,7 @@ +@model Umbraco.Forms.Mvc.Models.FieldViewModel + + diff --git a/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/FieldType.Textfield.cshtml b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/FieldType.Textfield.cshtml new file mode 100644 index 0000000000..4310d64d7b --- /dev/null +++ b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/FieldType.Textfield.cshtml @@ -0,0 +1,9 @@ +@model Umbraco.Forms.Mvc.Models.FieldViewModel +data-val="true"}} +@{if (Model.Mandatory) { data-val-required="@Model.RequiredErrorMessage"}} +@{if (Model.Validate) { data-val-regex="@Model.InvalidErrorMessage" data-regex="@Model.Regex"}} +/> + + + diff --git a/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/Fieldtype.Recaptcha.cshtml b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/Fieldtype.Recaptcha.cshtml new file mode 100644 index 0000000000..28bf5203e6 --- /dev/null +++ b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/Fieldtype.Recaptcha.cshtml @@ -0,0 +1,3 @@ +@using Umbraco.Forms.Mvc.Helpers +@model Umbraco.Forms.Mvc.Models.FieldViewModel +@ReCaptchaHelper.ReCaptcha(Model.AdditionalSettings.FirstOrDefault(x => x.Key == "Theme").Value) \ No newline at end of file diff --git a/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/Form.cshtml b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/Form.cshtml new file mode 100644 index 0000000000..1e70538932 --- /dev/null +++ b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/Form.cshtml @@ -0,0 +1,85 @@ +@inherits WebViewPage +@using Umbraco.Forms.Core +@using Umbraco.Forms.Mvc.Models +@using Umbraco.Forms.Mvc.BusinessLogic +@using Umbraco.Forms.MVC.Extensions + +@if (Model.SubmitHandled) +{ +

    @Model.MessageOnSubmit

    +} +else +{ + Html.EnableClientValidation(); + Html.EnableUnobtrusiveJavaScript(); + + @Html.Partial(FormViewResolver.GetScriptView(Model.FormId), Model) + + if (!Model.DisableDefaultStylesheet) + { + + + } + +
    + @using (Html.BeginForm("ContourForm", "FormRender", FormMethod.Post, new { enctype = "multipart/form-data" })) + { + @Html.AntiForgeryToken() + @Html.HiddenFor(x => Model.FormId) + + + + + + +
    +

    @Model.CurrentPage.Caption

    + @if (Model.ShowValidationSummary) + { + @Html.ValidationSummary(false) + } + @foreach (FieldsetViewModel fs in Model.CurrentPage.Fieldsets) + { +
    + @if (!string.IsNullOrEmpty(fs.Caption)) + { + @fs.Caption + } + @foreach (FieldViewModel f in fs.Fields) + { + bool hidden = f.HasCondition && f.ConditionActionType == FieldConditionActionType.Show; +
    style="display: none"}}> + @if(!f.HideLabel){} +
    @Html.Partial(FieldViewResolver.GetFieldView(Model.FormId, f.FieldTypeName, f.Caption), f) + @if (Model.ShowFieldValidaton){@Html.ValidationMessage(f.Id)}
    + @if (!string.IsNullOrEmpty(f.ToolTip)){@f.ToolTip} +
    + } +
    + } +
    + +
    +
    + +
    + @if (Model.IsMultiPage) + { + if (!Model.IsFirstPage) + { + + } + if (!Model.IsLastPage) + { + + } + } + @if (Model.IsLastPage) + { + + } +
    + + } +
    +} \ No newline at end of file diff --git a/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/Forms/Readme.txt b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/Forms/Readme.txt new file mode 100644 index 0000000000..31a78ba6e5 --- /dev/null +++ b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/Forms/Readme.txt @@ -0,0 +1,27 @@ +Custom markup for your Contour forms +---------------------------- +It's possible to update the default view for the Contour form and fieldtypes, +making it possible to have complete control over your form markup. +You can do this for al your forms or for a single form. + +To do this for all your forms simply update the default views: +~\umbraco\plugins\umbracoContour\Views\Form.cshtml (view for the form, including page name, fieldset, legend, field container) +~\umbraco\plugins\umbracoContour\Views\FieldType.*.cshtml (view for a specific field type like textfield, datepicker, ...) + +If you want to do this for a specific form you'll need to create the following folder: +~\umbraco\plugins\umbracoContour\Views\Forms\{FormId}\ (FormId needs to be an existing form id, you can view the id of the form on the settings tab of the form designer) + +As an example if your form id is 85514c04-e188-43d0-9246-98b34069750c then you can overwrite the form view by adding the Form.cshtml file to the directory +First copying the default one and then making your changes is the best way to get started +~\umbraco\plugins\umbracoContour\Views\Forms\85514c04-e188-43d0-9246-98b34069750c/Form.cshtml + +You can also overwrite views for 1 or more fieldtypes by adding the views to the folder (again if you first copy the default one and then make your changes...) +~\umbraco\plugins\umbracoContour\Views\Forms\85514c04-e188-43d0-9246-98b34069750c\Fieldtype.Textfield.cshtml + +A final option is to overwrite the view for a specific field on a form (if you want to target a specific field but not all fields of this type) +~\umbraco\plugins\umbracoContour\Views\Forms\85514c04-e188-43d0-9246-98b34069750c\FieldNameWithoutSpaces.cshtml + + + + + diff --git a/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/Script.cshtml b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/Script.cshtml new file mode 100644 index 0000000000..0186f76e68 --- /dev/null +++ b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/Script.cshtml @@ -0,0 +1,167 @@ +@inherits WebViewPage +@using Umbraco.Forms.Core +@using Umbraco.Forms.Mvc.Models +@using Umbraco.Forms.Mvc.BusinessLogic +@using Umbraco.Forms.MVC.Extensions +@using Umbraco.Forms.Core.Extensions + + + + \ No newline at end of file diff --git a/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/Web.config b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/Web.config new file mode 100644 index 0000000000..a4def2a3db --- /dev/null +++ b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/Web.config @@ -0,0 +1,58 @@ + + + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/_ViewStart.cshtml b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/_ViewStart.cshtml new file mode 100644 index 0000000000..efda124b1f --- /dev/null +++ b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Views/_ViewStart.cshtml @@ -0,0 +1,3 @@ +@{ + Layout = "~/Views/Shared/_Layout.cshtml"; +} \ No newline at end of file diff --git a/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Workflows.asmx b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Workflows.asmx new file mode 100644 index 0000000000..cc1852d204 --- /dev/null +++ b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/Workflows.asmx @@ -0,0 +1 @@ +<%@ WebService Language="C#" CodeBehind="Workflows.asmx.cs" Class="UmbracoContour.Webservices.Workflows" %> diff --git a/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/archiveForm.aspx b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/archiveForm.aspx new file mode 100644 index 0000000000..512113d027 --- /dev/null +++ b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/archiveForm.aspx @@ -0,0 +1,43 @@ +<%@ Page MasterPageFile="../../masterpages/umbracoDialog.Master" Language="C#" AutoEventWireup="true" CodeBehind="archiveForm.aspx.cs" Inherits="Umbraco.Forms.UI.Dialogs.archiveForm" %> + + + + + + + + + + +
    + +

    + + <% if (Request["unarchive"] == null) + { %> + Archiving your form will remove the form from various lists (form picker, ...) and will place the designer in read only mode. + <%} + else + { %> + Unarchiving your form will make it possible to edit the form again and the form will also appear in various list (form picker, ...) again. + <% } %> + +

    + + <%= umbraco.ui.Text("or") %> <%= umbraco.ui.Text("cancel") %> +
    + + + +

    The form '' + <% if (Request["unarchive"] == null) + { %> + has been archived. + <%} + else + { %> + has been unarchived. + <% } %>

    +
    +
    +
    diff --git a/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/createForm.ascx b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/createForm.ascx new file mode 100644 index 0000000000..4b4390f2e9 --- /dev/null +++ b/src/Umbraco.Web.UI/Umbraco/plugins/umbracoContour/createForm.ascx @@ -0,0 +1,25 @@ +<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="createForm.ascx.cs" Inherits="Umbraco.Forms.UI.Dialogs.createForm" %> + +

    To create a new form, simply give it a name and click the Create button. By Choosing a template, some relevant fields are automaticly added to your form (they can be edited afterwards). How does this work (video)?

    + +Name: *
    + + + + +
    Choose a template (optional):
    + + None + +
    + + + +