diff --git a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj index 1f7bf68b75..ad0f25d42e 100644 --- a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj +++ b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj @@ -762,19 +762,6 @@ - - - - - - - - - - - - - diff --git a/src/Umbraco.Web.UI/umbraco/plugins/uGoLive/Dashboard.ascx b/src/Umbraco.Web.UI/umbraco/plugins/uGoLive/Dashboard.ascx deleted file mode 100644 index a5ee2d2ba5..0000000000 --- a/src/Umbraco.Web.UI/umbraco/plugins/uGoLive/Dashboard.ascx +++ /dev/null @@ -1,66 +0,0 @@ -<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Dashboard.ascx.cs" Inherits="Our.Umbraco.uGoLive.Web.Umbraco.Plugins.uGoLive.Dashboard" %> -<%@ Import Namespace="Our.Umbraco.uGoLive.Web" %> -<%@ Import Namespace="Umbraco.Core.IO" %> -<%@ Register Namespace="ClientDependency.Core.Controls" Assembly="ClientDependency.Core" TagPrefix="cdf" %> - - - - - - - - - -
-
-
-
-
-

uGoLive Checklist

- uGoLive -

The uGoLive checklist is a checklist of the most widely accredited best practises when deploying an Umbraco website. uGoLive performs a complete system check against these practises, and highlights any areas that need attention.

- -
-
-
-
-
-
- - - - \ No newline at end of file diff --git a/src/Umbraco.Web.UI/umbraco/plugins/uGoLive/Dashboard.css b/src/Umbraco.Web.UI/umbraco/plugins/uGoLive/Dashboard.css deleted file mode 100644 index cf2ff8d914..0000000000 --- a/src/Umbraco.Web.UI/umbraco/plugins/uGoLive/Dashboard.css +++ /dev/null @@ -1,16 +0,0 @@ -.uGoLive .propertyItemContent img { vertical-align: middle; margin-right: 5px; } -.uGoLive .propertypane .propertypane { padding: 10px 10px 0px; } -.uGoLive .dashboardWrapper { padding: 5px 5px 5px 5px; overflow: hidden; color: #333; } -.uGoLive .dashboardWrapper h2 { margin-top: 0; padding-bottom: 10px; border-bottom: 1px solid #CCC; padding-left: 37px; line-height: 32px; } -.uGoLive .dashboardWrapper .dashboardIcon { position: absolute; top: 10px; left: 10px; } -.uGoLive .dashboardWrapper h3 { margin-bottom: 10px; } -.uGoLive .dashboardWrapper p { line-height: 1.4em; font-size: 1.1em; margin-top: 0; } -.uGoLive #btnRunChecks { color: #fff; background: #f26e20; padding: 10px; border: 0; font-weight: bold; cursor: pointer; outline: 0; } -.uGoLive #btnRunChecks.disabled { background: #f9b790; } -.uGoLive a.disabled { cursor: default; opacity:0.3; filter:alpha(opacity=30); } -.uGoLive span.status { padding-left: 20px; background-position: left center; background-repeat: no-repeat; line-height: 16px; } -.uGoLive span.status.uglUnchecked { background-image: url('help.png') } -.uGoLive span.status.uglChecking, .uGoLive span.status.uglQueued { background-image: url('throbber.gif') } -.uGoLive span.status.uglPassed, .uGoLive span.status.uglSuccess { background-image: url('tick.png') } -.uGoLive span.status.uglFailed { background-image: url('cross.png') } -.uGoLive span.status.uglIndeterminate { background-image: url('error.png') } \ No newline at end of file diff --git a/src/Umbraco.Web.UI/umbraco/plugins/uGoLive/Dashboard.js b/src/Umbraco.Web.UI/umbraco/plugins/uGoLive/Dashboard.js deleted file mode 100644 index 25980c1ffe..0000000000 --- a/src/Umbraco.Web.UI/umbraco/plugins/uGoLive/Dashboard.js +++ /dev/null @@ -1,165 +0,0 @@ -var Our = Our || {}; -Our.Umbraco = Our.Umbraco || {}; -Our.Umbraco.uGoLive = Our.Umbraco.uGoLive || {}; - -(function ($) { - - // Class representing a check group - Our.Umbraco.uGoLive.CheckGroup = function(name, checks, opts) { - var me = { - name: name, - checks: ko.observableArray([]) - }; - - for(var i = 0; i < checks.length; i++) { - me.checks.push(new Our.Umbraco.uGoLive.Check(checks[i], opts)); - } - - return me; - }; - - // Class representing a check - Our.Umbraco.uGoLive.Check = function(check, opts) { - var me = { - id: check.Id, - name: check.Name, - description: check.Description, - canRectify: check.CanRectify, - status: ko.observable("Unchecked"), - message: ko.observable("Unchecked"), - check: function (e, doneCallback) { - var _this = this; - - // Set status / message - _this.status("Checking"); - _this.message("Checking..."); - - // Perform check - $.getJSON(opts.basePath + '/uGoLive/Check/' + this.id + '.aspx', function(data) { - - // Set status / message - _this.status(data.Status.Value); - _this.message(data.Message); - - // Trigger done callback - if(doneCallback != undefined) - doneCallback(data); - }); - }, - rectify: function (e, doneCallback) { - var _this = this; - - // Set status / message - _this.status("Checking"); - _this.message("Rectifying..."); - - // Perform check - $.getJSON(opts.basePath + '/uGoLive/Rectify/' + this.id + '.aspx', function(data) { - - // Set status / message - _this.status(data.Status.Value); - _this.message(data.Message); - - // Trigger done callback - if(doneCallback != undefined) - doneCallback(data); - }); - } - }; - - return me; - }; - - Our.Umbraco.uGoLive.Dashboard = (function() { - - var opts = { - checkDefs: [], - basePath: "/base", - umbracoPath: "/umbraco" - }; - - var viewModel = { - checkGroups: ko.observableArray([]), - checkAllText: ko.observable("Run All Checks"), - checkAll: function() { - var _this = this; - - // Set button text - _this.checkAllText("Running..."); - - // Queue checks - ko.utils.arrayForEach(_this.allChecks(), function(check) { - check.status("Queued"); - check.message("Queued..."); - }); - - // Trigger checks - _this.checkNext(function () { - - // Reset button text - _this.checkAllText("Re-Run All Checks"); - }); - }, - checkNext: function (doneCallback) { - var _this = this; - - // Check for any queued checks - if(_this.queuedChecks().length > 0) { - - // Trigger first queued check - _this.queuedChecks()[0].check(null, function() { - - // Trigger the next check - _this.checkNext(doneCallback); - }); - } else { - - // Call done callback - if(doneCallback != undefined) - doneCallback(); - } - } - }; - - // Helper list of all checks - viewModel.allChecks = ko.dependentObservable(function() { - var all = []; - ko.utils.arrayForEach(this.checkGroups(), function(group) { - ko.utils.arrayForEach(group.checks(), function(check) { - all.push(check); - }); - }); - return all; - }, viewModel); - - // Helper list of queued checks - viewModel.queuedChecks = ko.dependentObservable(function() { - return ko.utils.arrayFilter(this.allChecks(), function(check) { - return check.status() == "Queued"; - }); - }, viewModel); - - return { - - init: function (o) { - - // Merge options - opts = $.extend(opts, o); - - // Parse all checks - for(var i = 0; i < opts.checkDefs.length; i++) { - var groupChecks = opts.checkDefs[i]; - if(groupChecks.length > 0) { - viewModel.checkGroups.push(new Our.Umbraco.uGoLive.CheckGroup(groupChecks[0].Group, groupChecks, opts)); - } - } - - // Bind view model - ko.applyBindings(viewModel, $("#uGoLive").get(0)); - } - - }; - - })(); - -})(jQuery) \ No newline at end of file diff --git a/src/Umbraco.Web.UI/umbraco/plugins/uGoLive/cog.png b/src/Umbraco.Web.UI/umbraco/plugins/uGoLive/cog.png deleted file mode 100644 index 67de2c6ccb..0000000000 Binary files a/src/Umbraco.Web.UI/umbraco/plugins/uGoLive/cog.png and /dev/null differ diff --git a/src/Umbraco.Web.UI/umbraco/plugins/uGoLive/cross.png b/src/Umbraco.Web.UI/umbraco/plugins/uGoLive/cross.png deleted file mode 100644 index 1514d51a3c..0000000000 Binary files a/src/Umbraco.Web.UI/umbraco/plugins/uGoLive/cross.png and /dev/null differ diff --git a/src/Umbraco.Web.UI/umbraco/plugins/uGoLive/error.png b/src/Umbraco.Web.UI/umbraco/plugins/uGoLive/error.png deleted file mode 100644 index 628cf2dae3..0000000000 Binary files a/src/Umbraco.Web.UI/umbraco/plugins/uGoLive/error.png and /dev/null differ diff --git a/src/Umbraco.Web.UI/umbraco/plugins/uGoLive/help.png b/src/Umbraco.Web.UI/umbraco/plugins/uGoLive/help.png deleted file mode 100644 index 5c870176d4..0000000000 Binary files a/src/Umbraco.Web.UI/umbraco/plugins/uGoLive/help.png and /dev/null differ diff --git a/src/Umbraco.Web.UI/umbraco/plugins/uGoLive/icon.png b/src/Umbraco.Web.UI/umbraco/plugins/uGoLive/icon.png deleted file mode 100644 index 307e473f26..0000000000 Binary files a/src/Umbraco.Web.UI/umbraco/plugins/uGoLive/icon.png and /dev/null differ diff --git a/src/Umbraco.Web.UI/umbraco/plugins/uGoLive/jquery.tmpl.js b/src/Umbraco.Web.UI/umbraco/plugins/uGoLive/jquery.tmpl.js deleted file mode 100644 index 386994e902..0000000000 --- a/src/Umbraco.Web.UI/umbraco/plugins/uGoLive/jquery.tmpl.js +++ /dev/null @@ -1,484 +0,0 @@ -/*! - * jQuery Templates Plugin 1.0.0pre - * http://github.com/jquery/jquery-tmpl - * Requires jQuery 1.4.2 - * - * Copyright Software Freedom Conservancy, Inc. - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - */ -(function( jQuery, undefined ){ - var oldManip = jQuery.fn.domManip, tmplItmAtt = "_tmplitem", htmlExpr = /^[^<]*(<[\w\W]+>)[^>]*$|\{\{\! /, - newTmplItems = {}, wrappedItems = {}, appendToTmplItems, topTmplItem = { key: 0, data: {} }, itemKey = 0, cloneIndex = 0, stack = []; - - function newTmplItem( options, parentItem, fn, data ) { - // Returns a template item data structure for a new rendered instance of a template (a 'template item'). - // The content field is a hierarchical array of strings and nested items (to be - // removed and replaced by nodes field of dom elements, once inserted in DOM). - var newItem = { - data: data || (data === 0 || data === false) ? data : (parentItem ? parentItem.data : {}), - _wrap: parentItem ? parentItem._wrap : null, - tmpl: null, - parent: parentItem || null, - nodes: [], - calls: tiCalls, - nest: tiNest, - wrap: tiWrap, - html: tiHtml, - update: tiUpdate - }; - if ( options ) { - jQuery.extend( newItem, options, { nodes: [], parent: parentItem }); - } - if ( fn ) { - // Build the hierarchical content to be used during insertion into DOM - newItem.tmpl = fn; - newItem._ctnt = newItem._ctnt || newItem.tmpl( jQuery, newItem ); - newItem.key = ++itemKey; - // Keep track of new template item, until it is stored as jQuery Data on DOM element - (stack.length ? wrappedItems : newTmplItems)[itemKey] = newItem; - } - return newItem; - } - - // Override appendTo etc., in order to provide support for targeting multiple elements. (This code would disappear if integrated in jquery core). - jQuery.each({ - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" - }, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var ret = [], insert = jQuery( selector ), elems, i, l, tmplItems, - parent = this.length === 1 && this[0].parentNode; - - appendToTmplItems = newTmplItems || {}; - if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) { - insert[ original ]( this[0] ); - ret = this; - } else { - for ( i = 0, l = insert.length; i < l; i++ ) { - cloneIndex = i; - elems = (i > 0 ? this.clone(true) : this).get(); - jQuery( insert[i] )[ original ]( elems ); - ret = ret.concat( elems ); - } - cloneIndex = 0; - ret = this.pushStack( ret, name, insert.selector ); - } - tmplItems = appendToTmplItems; - appendToTmplItems = null; - jQuery.tmpl.complete( tmplItems ); - return ret; - }; - }); - - jQuery.fn.extend({ - // Use first wrapped element as template markup. - // Return wrapped set of template items, obtained by rendering template against data. - tmpl: function( data, options, parentItem ) { - return jQuery.tmpl( this[0], data, options, parentItem ); - }, - - // Find which rendered template item the first wrapped DOM element belongs to - tmplItem: function() { - return jQuery.tmplItem( this[0] ); - }, - - // Consider the first wrapped element as a template declaration, and get the compiled template or store it as a named template. - template: function( name ) { - return jQuery.template( name, this[0] ); - }, - - domManip: function( args, table, callback, options ) { - if ( args[0] && jQuery.isArray( args[0] )) { - var dmArgs = jQuery.makeArray( arguments ), elems = args[0], elemsLength = elems.length, i = 0, tmplItem; - while ( i < elemsLength && !(tmplItem = jQuery.data( elems[i++], "tmplItem" ))) {} - if ( tmplItem && cloneIndex ) { - dmArgs[2] = function( fragClone ) { - // Handler called by oldManip when rendered template has been inserted into DOM. - jQuery.tmpl.afterManip( this, fragClone, callback ); - }; - } - oldManip.apply( this, dmArgs ); - } else { - oldManip.apply( this, arguments ); - } - cloneIndex = 0; - if ( !appendToTmplItems ) { - jQuery.tmpl.complete( newTmplItems ); - } - return this; - } - }); - - jQuery.extend({ - // Return wrapped set of template items, obtained by rendering template against data. - tmpl: function( tmpl, data, options, parentItem ) { - var ret, topLevel = !parentItem; - if ( topLevel ) { - // This is a top-level tmpl call (not from a nested template using {{tmpl}}) - parentItem = topTmplItem; - tmpl = jQuery.template[tmpl] || jQuery.template( null, tmpl ); - wrappedItems = {}; // Any wrapped items will be rebuilt, since this is top level - } else if ( !tmpl ) { - // The template item is already associated with DOM - this is a refresh. - // Re-evaluate rendered template for the parentItem - tmpl = parentItem.tmpl; - newTmplItems[parentItem.key] = parentItem; - parentItem.nodes = []; - if ( parentItem.wrapped ) { - updateWrapped( parentItem, parentItem.wrapped ); - } - // Rebuild, without creating a new template item - return jQuery( build( parentItem, null, parentItem.tmpl( jQuery, parentItem ) )); - } - if ( !tmpl ) { - return []; // Could throw... - } - if ( typeof data === "function" ) { - data = data.call( parentItem || {} ); - } - if ( options && options.wrapped ) { - updateWrapped( options, options.wrapped ); - } - ret = jQuery.isArray( data ) ? - jQuery.map( data, function( dataItem ) { - return dataItem ? newTmplItem( options, parentItem, tmpl, dataItem ) : null; - }) : - [ newTmplItem( options, parentItem, tmpl, data ) ]; - return topLevel ? jQuery( build( parentItem, null, ret ) ) : ret; - }, - - // Return rendered template item for an element. - tmplItem: function( elem ) { - var tmplItem; - if ( elem instanceof jQuery ) { - elem = elem[0]; - } - while ( elem && elem.nodeType === 1 && !(tmplItem = jQuery.data( elem, "tmplItem" )) && (elem = elem.parentNode) ) {} - return tmplItem || topTmplItem; - }, - - // Set: - // Use $.template( name, tmpl ) to cache a named template, - // where tmpl is a template string, a script element or a jQuery instance wrapping a script element, etc. - // Use $( "selector" ).template( name ) to provide access by name to a script block template declaration. - - // Get: - // Use $.template( name ) to access a cached template. - // Also $( selectorToScriptBlock ).template(), or $.template( null, templateString ) - // will return the compiled template, without adding a name reference. - // If templateString includes at least one HTML tag, $.template( templateString ) is equivalent - // to $.template( null, templateString ) - template: function( name, tmpl ) { - if (tmpl) { - // Compile template and associate with name - if ( typeof tmpl === "string" ) { - // This is an HTML string being passed directly in. - tmpl = buildTmplFn( tmpl ); - } else if ( tmpl instanceof jQuery ) { - tmpl = tmpl[0] || {}; - } - if ( tmpl.nodeType ) { - // If this is a template block, use cached copy, or generate tmpl function and cache. - tmpl = jQuery.data( tmpl, "tmpl" ) || jQuery.data( tmpl, "tmpl", buildTmplFn( tmpl.innerHTML )); - // Issue: In IE, if the container element is not a script block, the innerHTML will remove quotes from attribute values whenever the value does not include white space. - // This means that foo="${x}" will not work if the value of x includes white space: foo="${x}" -> foo=value of x. - // To correct this, include space in tag: foo="${ x }" -> foo="value of x" - } - return typeof name === "string" ? (jQuery.template[name] = tmpl) : tmpl; - } - // Return named compiled template - return name ? (typeof name !== "string" ? jQuery.template( null, name ): - (jQuery.template[name] || - // If not in map, and not containing at least on HTML tag, treat as a selector. - // (If integrated with core, use quickExpr.exec) - jQuery.template( null, htmlExpr.test( name ) ? name : jQuery( name )))) : null; - }, - - encode: function( text ) { - // Do HTML encoding replacing < > & and ' and " by corresponding entities. - return ("" + text).split("<").join("<").split(">").join(">").split('"').join(""").split("'").join("'"); - } - }); - - jQuery.extend( jQuery.tmpl, { - tag: { - "tmpl": { - _default: { $2: "null" }, - open: "if($notnull_1){__=__.concat($item.nest($1,$2));}" - // tmpl target parameter can be of type function, so use $1, not $1a (so not auto detection of functions) - // This means that {{tmpl foo}} treats foo as a template (which IS a function). - // Explicit parens can be used if foo is a function that returns a template: {{tmpl foo()}}. - }, - "wrap": { - _default: { $2: "null" }, - open: "$item.calls(__,$1,$2);__=[];", - close: "call=$item.calls();__=call._.concat($item.wrap(call,__));" - }, - "each": { - _default: { $2: "$index, $value" }, - open: "if($notnull_1){$.each($1a,function($2){with(this){", - close: "}});}" - }, - "if": { - open: "if(($notnull_1) && $1a){", - close: "}" - }, - "else": { - _default: { $1: "true" }, - open: "}else if(($notnull_1) && $1a){" - }, - "html": { - // Unecoded expression evaluation. - open: "if($notnull_1){__.push($1a);}" - }, - "=": { - // Encoded expression evaluation. Abbreviated form is ${}. - _default: { $1: "$data" }, - open: "if($notnull_1){__.push($.encode($1a));}" - }, - "!": { - // Comment tag. Skipped by parser - open: "" - } - }, - - // This stub can be overridden, e.g. in jquery.tmplPlus for providing rendered events - complete: function( items ) { - newTmplItems = {}; - }, - - // Call this from code which overrides domManip, or equivalent - // Manage cloning/storing template items etc. - afterManip: function afterManip( elem, fragClone, callback ) { - // Provides cloned fragment ready for fixup prior to and after insertion into DOM - var content = fragClone.nodeType === 11 ? - jQuery.makeArray(fragClone.childNodes) : - fragClone.nodeType === 1 ? [fragClone] : []; - - // Return fragment to original caller (e.g. append) for DOM insertion - callback.call( elem, fragClone ); - - // Fragment has been inserted:- Add inserted nodes to tmplItem data structure. Replace inserted element annotations by jQuery.data. - storeTmplItems( content ); - cloneIndex++; - } - }); - - //========================== Private helper functions, used by code above ========================== - - function build( tmplItem, nested, content ) { - // Convert hierarchical content into flat string array - // and finally return array of fragments ready for DOM insertion - var frag, ret = content ? jQuery.map( content, function( item ) { - return (typeof item === "string") ? - // Insert template item annotations, to be converted to jQuery.data( "tmplItem" ) when elems are inserted into DOM. - (tmplItem.key ? item.replace( /(<\w+)(?=[\s>])(?![^>]*_tmplitem)([^>]*)/g, "$1 " + tmplItmAtt + "=\"" + tmplItem.key + "\" $2" ) : item) : - // This is a child template item. Build nested template. - build( item, tmplItem, item._ctnt ); - }) : - // If content is not defined, insert tmplItem directly. Not a template item. May be a string, or a string array, e.g. from {{html $item.html()}}. - tmplItem; - if ( nested ) { - return ret; - } - - // top-level template - ret = ret.join(""); - - // Support templates which have initial or final text nodes, or consist only of text - // Also support HTML entities within the HTML markup. - ret.replace( /^\s*([^<\s][^<]*)?(<[\w\W]+>)([^>]*[^>\s])?\s*$/, function( all, before, middle, after) { - frag = jQuery( middle ).get(); - - storeTmplItems( frag ); - if ( before ) { - frag = unencode( before ).concat(frag); - } - if ( after ) { - frag = frag.concat(unencode( after )); - } - }); - return frag ? frag : unencode( ret ); - } - - function unencode( text ) { - // Use createElement, since createTextNode will not render HTML entities correctly - var el = document.createElement( "div" ); - el.innerHTML = text; - return jQuery.makeArray(el.childNodes); - } - - // Generate a reusable function that will serve to render a template against data - function buildTmplFn( markup ) { - return new Function("jQuery","$item", - // Use the variable __ to hold a string array while building the compiled template. (See https://github.com/jquery/jquery-tmpl/issues#issue/10). - "var $=jQuery,call,__=[],$data=$item.data;" + - - // Introduce the data as local variables using with(){} - "with($data){__.push('" + - - // Convert the template into pure JavaScript - jQuery.trim(markup) - .replace( /([\\'])/g, "\\$1" ) - .replace( /[\r\t\n]/g, " " ) - .replace( /\$\{([^\}]*)\}/g, "{{= $1}}" ) - .replace( /\{\{(\/?)(\w+|.)(?:\(((?:[^\}]|\}(?!\}))*?)?\))?(?:\s+(.*?)?)?(\(((?:[^\}]|\}(?!\}))*?)\))?\s*\}\}/g, - function( all, slash, type, fnargs, target, parens, args ) { - var tag = jQuery.tmpl.tag[ type ], def, expr, exprAutoFnDetect; - if ( !tag ) { - throw "Unknown template tag: " + type; - } - def = tag._default || []; - if ( parens && !/\w$/.test(target)) { - target += parens; - parens = ""; - } - if ( target ) { - target = unescape( target ); - args = args ? ("," + unescape( args ) + ")") : (parens ? ")" : ""); - // Support for target being things like a.toLowerCase(); - // In that case don't call with template item as 'this' pointer. Just evaluate... - expr = parens ? (target.indexOf(".") > -1 ? target + unescape( parens ) : ("(" + target + ").call($item" + args)) : target; - exprAutoFnDetect = parens ? expr : "(typeof(" + target + ")==='function'?(" + target + ").call($item):(" + target + "))"; - } else { - exprAutoFnDetect = expr = def.$1 || "null"; - } - fnargs = unescape( fnargs ); - return "');" + - tag[ slash ? "close" : "open" ] - .split( "$notnull_1" ).join( target ? "typeof(" + target + ")!=='undefined' && (" + target + ")!=null" : "true" ) - .split( "$1a" ).join( exprAutoFnDetect ) - .split( "$1" ).join( expr ) - .split( "$2" ).join( fnargs || def.$2 || "" ) + - "__.push('"; - }) + - "');}return __;" - ); - } - function updateWrapped( options, wrapped ) { - // Build the wrapped content. - options._wrap = build( options, true, - // Suport imperative scenario in which options.wrapped can be set to a selector or an HTML string. - jQuery.isArray( wrapped ) ? wrapped : [htmlExpr.test( wrapped ) ? wrapped : jQuery( wrapped ).html()] - ).join(""); - } - - function unescape( args ) { - return args ? args.replace( /\\'/g, "'").replace(/\\\\/g, "\\" ) : null; - } - function outerHtml( elem ) { - var div = document.createElement("div"); - div.appendChild( elem.cloneNode(true) ); - return div.innerHTML; - } - - // Store template items in jQuery.data(), ensuring a unique tmplItem data data structure for each rendered template instance. - function storeTmplItems( content ) { - var keySuffix = "_" + cloneIndex, elem, elems, newClonedItems = {}, i, l, m; - for ( i = 0, l = content.length; i < l; i++ ) { - if ( (elem = content[i]).nodeType !== 1 ) { - continue; - } - elems = elem.getElementsByTagName("*"); - for ( m = elems.length - 1; m >= 0; m-- ) { - processItemKey( elems[m] ); - } - processItemKey( elem ); - } - function processItemKey( el ) { - var pntKey, pntNode = el, pntItem, tmplItem, key; - // Ensure that each rendered template inserted into the DOM has its own template item, - if ( (key = el.getAttribute( tmplItmAtt ))) { - while ( pntNode.parentNode && (pntNode = pntNode.parentNode).nodeType === 1 && !(pntKey = pntNode.getAttribute( tmplItmAtt ))) { } - if ( pntKey !== key ) { - // The next ancestor with a _tmplitem expando is on a different key than this one. - // So this is a top-level element within this template item - // Set pntNode to the key of the parentNode, or to 0 if pntNode.parentNode is null, or pntNode is a fragment. - pntNode = pntNode.parentNode ? (pntNode.nodeType === 11 ? 0 : (pntNode.getAttribute( tmplItmAtt ) || 0)) : 0; - if ( !(tmplItem = newTmplItems[key]) ) { - // The item is for wrapped content, and was copied from the temporary parent wrappedItem. - tmplItem = wrappedItems[key]; - tmplItem = newTmplItem( tmplItem, newTmplItems[pntNode]||wrappedItems[pntNode] ); - tmplItem.key = ++itemKey; - newTmplItems[itemKey] = tmplItem; - } - if ( cloneIndex ) { - cloneTmplItem( key ); - } - } - el.removeAttribute( tmplItmAtt ); - } else if ( cloneIndex && (tmplItem = jQuery.data( el, "tmplItem" )) ) { - // This was a rendered element, cloned during append or appendTo etc. - // TmplItem stored in jQuery data has already been cloned in cloneCopyEvent. We must replace it with a fresh cloned tmplItem. - cloneTmplItem( tmplItem.key ); - newTmplItems[tmplItem.key] = tmplItem; - pntNode = jQuery.data( el.parentNode, "tmplItem" ); - pntNode = pntNode ? pntNode.key : 0; - } - if ( tmplItem ) { - pntItem = tmplItem; - // Find the template item of the parent element. - // (Using !=, not !==, since pntItem.key is number, and pntNode may be a string) - while ( pntItem && pntItem.key != pntNode ) { - // Add this element as a top-level node for this rendered template item, as well as for any - // ancestor items between this item and the item of its parent element - pntItem.nodes.push( el ); - pntItem = pntItem.parent; - } - // Delete content built during rendering - reduce API surface area and memory use, and avoid exposing of stale data after rendering... - delete tmplItem._ctnt; - delete tmplItem._wrap; - // Store template item as jQuery data on the element - jQuery.data( el, "tmplItem", tmplItem ); - } - function cloneTmplItem( key ) { - key = key + keySuffix; - tmplItem = newClonedItems[key] = - (newClonedItems[key] || newTmplItem( tmplItem, newTmplItems[tmplItem.parent.key + keySuffix] || tmplItem.parent )); - } - } - } - - //---- Helper functions for template item ---- - - function tiCalls( content, tmpl, data, options ) { - if ( !content ) { - return stack.pop(); - } - stack.push({ _: content, tmpl: tmpl, item:this, data: data, options: options }); - } - - function tiNest( tmpl, data, options ) { - // nested template, using {{tmpl}} tag - return jQuery.tmpl( jQuery.template( tmpl ), data, options, this ); - } - - function tiWrap( call, wrapped ) { - // nested template, using {{wrap}} tag - var options = call.options || {}; - options.wrapped = wrapped; - // Apply the template, which may incorporate wrapped content, - return jQuery.tmpl( jQuery.template( call.tmpl ), call.data, options, call.item ); - } - - function tiHtml( filter, textOnly ) { - var wrapped = this._wrap; - return jQuery.map( - jQuery( jQuery.isArray( wrapped ) ? wrapped.join("") : wrapped ).filter( filter || "*" ), - function(e) { - return textOnly ? - e.innerText || e.textContent : - e.outerHTML || outerHtml(e); - }); - } - - function tiUpdate() { - var coll = this.nodes; - jQuery.tmpl( null, null, null, this).insertBefore( coll[0] ); - jQuery( coll ).remove(); - } -})( jQuery ); \ No newline at end of file diff --git a/src/Umbraco.Web.UI/umbraco/plugins/uGoLive/knockout-1.2.1.js b/src/Umbraco.Web.UI/umbraco/plugins/uGoLive/knockout-1.2.1.js deleted file mode 100644 index 225d7de7a7..0000000000 --- a/src/Umbraco.Web.UI/umbraco/plugins/uGoLive/knockout-1.2.1.js +++ /dev/null @@ -1,194 +0,0 @@ -// Knockout JavaScript library v1.2.1 -// (c) Steven Sanderson - http://knockoutjs.com/ -// License: MIT (http://www.opensource.org/licenses/mit-license.php) - -(function (window, undefined) { - function c(e) { throw e; } var m = void 0, o = null, p = window.ko = {}; p.b = function (e, d) { for (var b = e.split("."), a = window, f = 0; f < b.length - 1; f++) a = a[b[f]]; a[b[b.length - 1]] = d }; p.i = function (e, d, b) { e[d] = b }; - p.a = new function () { - function e(a, b) { if (a.tagName != "INPUT" || !a.type) return !1; if (b.toLowerCase() != "click") return !1; var d = a.type.toLowerCase(); return d == "checkbox" || d == "radio" } var d = /^(\s|\u00A0)+|(\s|\u00A0)+$/g, b = /MSIE 6/i.test(navigator.userAgent), a = /MSIE 7/i.test(navigator.userAgent), f = {}, h = {}; f[/Firefox\/2/i.test(navigator.userAgent) ? "KeyboardEvent" : "UIEvents"] = ["keyup", "keydown", "keypress"]; f.MouseEvents = ["click", "dblclick", "mousedown", "mouseup", "mousemove", "mouseover", "mouseout", "mouseenter", "mouseleave"]; - for (var g in f) { var i = f[g]; if (i.length) for (var k = 0, j = i.length; k < j; k++) h[i[k]] = g } return { ca: ["authenticity_token", /^__RequestVerificationToken(_.*)?$/], g: function (a, b) { for (var d = 0, e = a.length; d < e; d++) b(a[d]) }, h: function (a, b) { if (typeof a.indexOf == "function") return a.indexOf(b); for (var d = 0, e = a.length; d < e; d++) if (a[d] === b) return d; return -1 }, xa: function (a, b, d) { for (var e = 0, f = a.length; e < f; e++) if (b.call(d, a[e])) return a[e]; return o }, N: function (a, b) { var d = p.a.h(a, b); d >= 0 && a.splice(d, 1) }, L: function (a) { - for (var a = -a || [], b = [], d = 0, e = a.length; d < e; d++) p.a.h(b, a[d]) < 0 && b.push(a[d]); return b - }, M: function (a, b) { for (var a = a || [], d = [], e = 0, f = a.length; e < f; e++) d.push(b(a[e])); return d }, K: function (a, b) { for (var a = a || [], d = [], e = 0, f = a.length; e < f; e++) b(a[e]) && d.push(a[e]); return d }, u: function (a, b) { for (var d = 0, e = b.length; d < e; d++) a.push(b[d]) }, Q: function (a) { for (; a.firstChild; ) p.removeNode(a.firstChild) }, Xa: function (a, b) { p.a.Q(a); b && p.a.g(b, function (b) { a.appendChild(b) }) }, ka: function (a, b) { - var d = a.nodeType ? [a] : a; if (d.length > 0) { - for (var e = -d[0], f = e.parentNode, h = 0, g = b.length; h < g; h++) f.insertBefore(b[h], e); h = 0; for (g = d.length; h < g; h++) p.removeNode(d[h]) - } - }, ma: function (a, b) { navigator.userAgent.indexOf("MSIE 6") >= 0 ? a.setAttribute("selected", b) : a.selected = b }, da: function (a, b) { if (!a || a.nodeType != 1) return []; var d = []; a.getAttribute(b) !== o && d.push(a); for (var e = a.getElementsByTagName("*"), f = 0, h = e.length; f < h; f++) e[f].getAttribute(b) !== o && d.push(e[f]); return d }, k: function (a) { return (a || "").replace(d, "") }, ab: function (a, b) { - for (var d = [], e = (a || "").split(b), -f = 0, h = e.length; f < h; f++) { var g = p.a.k(e[f]); g !== "" && d.push(g) } return d - }, Za: function (a, b) { a = a || ""; if (b.length > a.length) return !1; return a.substring(0, b.length) === b }, Ha: function (a, b) { if (b === m) return (new Function("return " + a))(); return (new Function("sc", "with(sc) { return (" + a + ") }"))(b) }, Fa: function (a, b) { if (b.compareDocumentPosition) return (b.compareDocumentPosition(a) & 16) == 16; for (; a != o; ) { if (a == b) return !0; a = a.parentNode } return !1 }, P: function (a) { return p.a.Fa(a, document) }, t: function (a, b, d) { - if (typeof jQuery != -"undefined") { if (e(a, b)) var f = d, d = function (a, b) { var d = this.checked; if (b) this.checked = b.Aa !== !0; f.call(this, a); this.checked = d }; jQuery(a).bind(b, d) } else typeof a.addEventListener == "function" ? a.addEventListener(b, d, !1) : typeof a.attachEvent != "undefined" ? a.attachEvent("on" + b, function (b) { d.call(a, b) }) : c(Error("Browser doesn't support addEventListener or attachEvent")) - }, qa: function (a, b) { - (!a || !a.nodeType) && c(Error("element must be a DOM node when calling triggerEvent")); if (typeof jQuery != "undefined") { - var d = -[]; e(a, b) && d.push({ Aa: a.checked }); jQuery(a).trigger(b, d) - } else if (typeof document.createEvent == "function") typeof a.dispatchEvent == "function" ? (d = document.createEvent(h[b] || "HTMLEvents"), d.initEvent(b, !0, !0, window, 0, 0, 0, 0, 0, !1, !1, !1, !1, 0, a), a.dispatchEvent(d)) : c(Error("The supplied element doesn't support dispatchEvent")); else if (typeof a.fireEvent != "undefined") { - if (b == "click" && a.tagName == "INPUT" && (a.type.toLowerCase() == "checkbox" || a.type.toLowerCase() == "radio")) a.checked = a.checked !== !0; a.fireEvent("on" + -b) - } else c(Error("Browser doesn't support triggering events")) - }, d: function (a) { return p.C(a) ? a() : a }, Ea: function (a, b) { return p.a.h((a.className || "").split(/\s+/), b) >= 0 }, pa: function (a, b, d) { var e = p.a.Ea(a, b); if (d && !e) a.className = (a.className || "") + " " + b; else if (e && !d) { for (var d = (a.className || "").split(/\s+/), e = "", f = 0; f < d.length; f++) d[f] != b && (e += d[f] + " "); a.className = p.a.k(e) } }, Ua: function (a, b) { for (var a = p.a.d(a), b = p.a.d(b), d = [], e = a; e <= b; e++) d.push(e); return d }, U: function (a) { - for (var b = [], d = 0, e = a.length; d < -e; d++) b.push(a[d]); return b - }, S: b, Ma: a, ea: function (a, b) { for (var d = p.a.U(a.getElementsByTagName("INPUT")).concat(p.a.U(a.getElementsByTagName("TEXTAREA"))), e = typeof b == "string" ? function (a) { return a.name === b } : function (a) { return b.test(a.name) }, f = [], h = d.length - 1; h >= 0; h--) e(d[h]) && f.push(d[h]); return f }, F: function (a) { if (typeof a == "string" && (a = p.a.k(a))) { if (window.JSON && window.JSON.parse) return window.JSON.parse(a); return (new Function("return " + a))() } return o }, Y: function (a) { - (typeof JSON == "undefined" || typeof JSON.stringify == -"undefined") && c(Error("Cannot find JSON.stringify(). Some browsers (e.g., IE < 8) don't support it natively, but you can overcome this by adding a script reference to json2.js, downloadable from http://www.json.org/json2.js")); return JSON.stringify(p.a.d(a)) - }, Ta: function (a, b, d) { - var d = d || {}, e = d.params || {}, f = d.includeFields || this.ca, h = a; if (typeof a == "object" && a.tagName == "FORM") for (var h = a.action, g = f.length - 1; g >= 0; g--) for (var i = p.a.ea(a, f[g]), k = i.length - 1; k >= 0; k--) e[i[k].name] = i[k].value; var b = p.a.d(b), -j = document.createElement("FORM"); j.style.display = "none"; j.action = h; j.method = "post"; for (var u in b) a = document.createElement("INPUT"), a.name = u, a.value = p.a.Y(p.a.d(b[u])), j.appendChild(a); for (u in e) a = document.createElement("INPUT"), a.name = u, a.value = e[u], j.appendChild(a); document.body.appendChild(j); d.submitter ? d.submitter(j) : j.submit(); setTimeout(function () { j.parentNode.removeChild(j) }, 0) - } - } - }; p.b("ko.utils", p.a); p.b("ko.utils.arrayForEach", p.a.g); p.b("ko.utils.arrayFirst", p.a.xa); - p.b("ko.utils.arrayFilter", p.a.K); p.b("ko.utils.arrayGetDistinctValues", p.a.L); p.b("ko.utils.arrayIndexOf", p.a.h); p.b("ko.utils.arrayMap", p.a.M); p.b("ko.utils.arrayPushAll", p.a.u); p.b("ko.utils.arrayRemoveItem", p.a.N); p.b("ko.utils.fieldsIncludedWithJsonPost", p.a.ca); p.b("ko.utils.getElementsHavingAttribute", p.a.da); p.b("ko.utils.getFormFields", p.a.ea); p.b("ko.utils.postJson", p.a.Ta); p.b("ko.utils.parseJson", p.a.F); p.b("ko.utils.registerEventHandler", p.a.t); p.b("ko.utils.stringifyJson", p.a.Y); - p.b("ko.utils.range", p.a.Ua); p.b("ko.utils.toggleDomNodeCssClass", p.a.pa); p.b("ko.utils.triggerEvent", p.a.qa); p.b("ko.utils.unwrapObservable", p.a.d); Function.prototype.bind || (Function.prototype.bind = function (e) { var d = this, b = Array.prototype.slice.call(arguments), e = b.shift(); return function () { return d.apply(e, b.concat(Array.prototype.slice.call(arguments))) } }); - p.a.e = new function () { var e = 0, d = "__ko__" + (new Date).getTime(), b = {}; return { get: function (a, b) { var d = p.a.e.getAll(a, !1); return d === m ? m : d[b] }, set: function (a, b, d) { d === m && p.a.e.getAll(a, !1) === m || (p.a.e.getAll(a, !0)[b] = d) }, getAll: function (a, f) { var h = a[d]; if (!h) { if (!f) return; h = a[d] = "ko" + e++; b[h] = {} } return b[h] }, clear: function (a) { var e = a[d]; e && (delete b[e], a[d] = o) } } }; - p.a.p = new function () { - function e(a, d) { var e = p.a.e.get(a, b); e === m && d && (e = [], p.a.e.set(a, b, e)); return e } function d(a) { var b = e(a, !1); if (b) for (var b = b.slice(0), d = 0; d < b.length; d++) b[d](a); p.a.e.clear(a); typeof jQuery == "function" && typeof jQuery.cleanData == "function" && jQuery.cleanData([a]) } var b = "__ko_domNodeDisposal__" + (new Date).getTime(); return { ba: function (a, b) { typeof b != "function" && c(Error("Callback must be a function")); e(a, !0).push(b) }, ja: function (a, d) { - var h = e(a, !1); h && (p.a.N(h, d), h.length == 0 && p.a.e.set(a, -b, m)) - }, v: function (a) { if (!(a.nodeType != 1 && a.nodeType != 9)) { d(a); var b = []; p.a.u(b, a.getElementsByTagName("*")); for (var a = 0, e = b.length; a < e; a++) d(b[a]) } }, removeNode: function (a) { p.v(a); a.parentNode && a.parentNode.removeChild(a) } - } - }; p.v = p.a.p.v; p.removeNode = p.a.p.removeNode; p.b("ko.cleanNode", p.v); p.b("ko.removeNode", p.removeNode); p.b("ko.utils.domNodeDisposal", p.a.p); p.b("ko.utils.domNodeDisposal.addDisposeCallback", p.a.p.ba); p.b("ko.utils.domNodeDisposal.removeDisposeCallback", p.a.p.ja); - p.a.Sa = function (e) { if (typeof jQuery != "undefined") e = jQuery.clean([e]); else { var d = p.a.k(e).toLowerCase(), b = document.createElement("div"), d = d.match(/^<(thead|tbody|tfoot)/) && [1, "", "
"] || !d.indexOf("", ""] || (!d.indexOf("", ""] || [0, "", ""]; for (b.innerHTML = d[1] + e + d[2]; d[0]--; ) b = b.lastChild; e = p.a.U(b.childNodes) } return e }; - p.a.Ya = function (e, d) { p.a.Q(e); if (d !== o && d !== m) if (typeof d != "string" && (d = d.toString()), typeof jQuery != "undefined") jQuery(e).html(d); else for (var b = p.a.Sa(d), a = 0; a < b.length; a++) e.appendChild(b[a]) }; - p.l = function () { - function e() { return ((1 + Math.random()) * 4294967296 | 0).toString(16).substring(1) } function d(a, b) { if (a) if (a.nodeType == 8) { var e = p.l.ha(a.nodeValue); e != o && b.push({ Da: a, Pa: e }) } else if (a.nodeType == 1) for (var e = 0, g = a.childNodes, i = g.length; e < i; e++) d(g[e], b) } var b = {}; return { V: function (a) { typeof a != "function" && c(Error("You can only pass a function to ko.memoization.memoize()")); var d = e() + e(); b[d] = a; return "<\!--[ko_memo:" + d + "]--\>" }, ra: function (a, d) { - var e = b[a]; e === m && c(Error("Couldn't find any memo with ID " + -a + ". Perhaps it's already been unmemoized.")); try { return e.apply(o, d || []), !0 } finally { delete b[a] } - }, sa: function (a, b) { var e = []; d(a, e); for (var g = 0, i = e.length; g < i; g++) { var k = e[g].Da, j = [k]; b && p.a.u(j, b); p.l.ra(e[g].Pa, j); k.nodeValue = ""; k.parentNode && k.parentNode.removeChild(k) } }, ha: function (a) { return (a = a.match(/^\[ko_memo\:(.*?)\]$/)) ? a[1] : o } - } - } (); p.b("ko.memoization", p.l); p.b("ko.memoization.memoize", p.l.V); p.b("ko.memoization.unmemoize", p.l.ra); p.b("ko.memoization.parseMemoText", p.l.ha); - p.b("ko.memoization.unmemoizeDomNodeAndDescendants", p.l.sa); p.$a = function (e, d) { this.za = e; this.n = function () { this.La = !0; d() } .bind(this); p.i(this, "dispose", this.n) }; p.Z = function () { var e = []; this.$ = function (d, b) { var a = b ? d.bind(b) : d, f = new p.$a(a, function () { p.a.N(e, f) }); e.push(f); return f }; this.z = function (d) { p.a.g(e.slice(0), function (b) { b && b.La !== !0 && b.za(d) }) }; this.Ja = function () { return e.length }; p.i(this, "subscribe", this.$); p.i(this, "notifySubscribers", this.z); p.i(this, "getSubscriptionsCount", this.Ja) }; - p.ga = function (e) { return typeof e.$ == "function" && typeof e.z == "function" }; p.b("ko.subscribable", p.Z); p.b("ko.isSubscribable", p.ga); p.A = function () { var e = []; return { ya: function () { e.push([]) }, end: function () { return e.pop() }, ia: function (d) { p.ga(d) || c("Only subscribable things can act as dependencies"); e.length > 0 && e[e.length - 1].push(d) } } } (); var x = { undefined: !0, "boolean": !0, number: !0, string: !0 }; function y(e, d) { return e === o || typeof e in x ? e === d : !1 } - p.s = function (e) { function d() { if (arguments.length > 0) { if (!d.equalityComparer || !d.equalityComparer(b, arguments[0])) b = arguments[0], d.z(b); return this } else return p.A.ia(d), b } var b = e; d.o = p.s; d.H = function () { d.z(b) }; d.equalityComparer = y; p.Z.call(d); p.i(d, "valueHasMutated", d.H); return d }; p.C = function (e) { if (e === o || e === m || e.o === m) return !1; if (e.o === p.s) return !0; return p.C(e.o) }; p.D = function (e) { if (typeof e == "function" && e.o === p.s) return !0; if (typeof e == "function" && e.o === p.j && e.Ka) return !0; return !1 }; - p.b("ko.observable", p.s); p.b("ko.isObservable", p.C); p.b("ko.isWriteableObservable", p.D); - p.Ra = function (e) { - arguments.length == 0 && (e = []); e !== o && e !== m && !("length" in e) && c(Error("The argument passed when initializing an observable array must be an array, or null, or undefined.")); var d = new p.s(e); p.a.g(["pop", "push", "reverse", "shift", "sort", "splice", "unshift"], function (b) { d[b] = function () { var a = d(), a = a[b].apply(a, arguments); d.H(); return a } }); p.a.g(["slice"], function (b) { d[b] = function () { var a = d(); return a[b].apply(a, arguments) } }); d.remove = function (b) { - for (var a = d(), e = [], h = [], g = typeof b == "function" ? -b : function (a) { return a === b }, i = 0, k = a.length; i < k; i++) { var j = a[i]; g(j) ? h.push(j) : e.push(j) } d(e); return h - }; d.Va = function (b) { if (b === m) { var a = d(); d([]); return a } if (!b) return []; return d.remove(function (a) { return p.a.h(b, a) >= 0 }) }; d.O = function (b) { for (var a = d(), e = typeof b == "function" ? b : function (a) { return a === b }, h = a.length - 1; h >= 0; h--) e(a[h]) && (a[h]._destroy = !0); d.H() }; d.Ca = function (b) { if (b === m) return d.O(function () { return !0 }); if (!b) return []; return d.O(function (a) { return p.a.h(b, a) >= 0 }) }; d.indexOf = function (b) { - var a = -d(); return p.a.h(a, b) - }; d.replace = function (b, a) { var e = d.indexOf(b); e >= 0 && (d()[e] = a, d.H()) }; p.i(d, "remove", d.remove); p.i(d, "removeAll", d.Va); p.i(d, "destroy", d.O); p.i(d, "destroyAll", d.Ca); p.i(d, "indexOf", d.indexOf); return d - }; p.b("ko.observableArray", p.Ra); - p.j = function (e, d, b) { - function a() { p.a.g(n, function (a) { a.n() }); n = [] } function f(b) { a(); p.a.g(b, function (a) { n.push(a.$(h)) }) } function h() { if (k && typeof b.disposeWhen == "function" && b.disposeWhen()) g.n(); else { try { p.A.ya(), i = b.owner ? b.read.call(b.owner) : b.read() } finally { var a = p.a.L(p.A.end()); f(a) } g.z(i); k = !0 } } function g() { - if (arguments.length > 0) if (typeof b.write === "function") { var a = arguments[0]; b.owner ? b.write.call(b.owner, a) : b.write(a) } else c("Cannot write a value to a dependentObservable unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters."); - else return k || h(), p.A.ia(g), i - } var i, k = !1; e && typeof e == "object" ? b = e : (b = b || {}, b.read = e || b.read, b.owner = d || b.owner); typeof b.read != "function" && c("Pass a function that returns the value of the dependentObservable"); var j = typeof b.disposeWhenNodeIsRemoved == "object" ? b.disposeWhenNodeIsRemoved : o, l = o; if (j) { l = function () { g.n() }; p.a.p.ba(j, l); var q = b.disposeWhen; b.disposeWhen = function () { return !p.a.P(j) || typeof q == "function" && q() } } var n = []; g.o = p.j; g.Ia = function () { return n.length }; g.Ka = typeof b.write === "function"; - g.n = function () { j && p.a.p.ja(j, l); a() }; p.Z.call(g); b.deferEvaluation !== !0 && h(); p.i(g, "dispose", g.n); p.i(g, "getDependenciesCount", g.Ia); return g - }; p.j.o = p.s; p.b("ko.dependentObservable", p.j); - (function () { - function e(a, f, h) { h = h || new b; a = f(a); if (!(typeof a == "object" && a !== o && a !== m)) return a; var g = a instanceof Array ? [] : {}; h.save(a, g); d(a, function (b) { var d = f(a[b]); switch (typeof d) { case "boolean": case "number": case "string": case "function": g[b] = d; break; case "object": case "undefined": var j = h.get(d); g[b] = j !== m ? j : e(d, f, h) } }); return g } function d(a, b) { if (a instanceof Array) for (var d = 0; d < a.length; d++) b(d); else for (d in a) b(d) } function b() { - var a = [], b = []; this.save = function (d, e) { - var i = p.a.h(a, d); i >= 0 ? -b[i] = e : (a.push(d), b.push(e)) - }; this.get = function (d) { d = p.a.h(a, d); return d >= 0 ? b[d] : m } - } p.oa = function (a) { arguments.length == 0 && c(Error("When calling ko.toJS, pass the object you want to convert.")); return e(a, function (a) { for (var b = 0; p.C(a) && b < 10; b++) a = a(); return a }) }; p.toJSON = function (a) { a = p.oa(a); return p.a.Y(a) } - })(); p.b("ko.toJS", p.oa); p.b("ko.toJSON", p.toJSON); - p.f = { m: function (e) { if (e.tagName == "OPTION") { if (e.__ko__hasDomDataOptionValue__ === !0) return p.a.e.get(e, p.c.options.W); return e.getAttribute("value") } else return e.tagName == "SELECT" ? e.selectedIndex >= 0 ? p.f.m(e.options[e.selectedIndex]) : m : e.value }, I: function (e, d) { - if (e.tagName == "OPTION") switch (typeof d) { - case "string": case "number": p.a.e.set(e, p.c.options.W, m); "__ko__hasDomDataOptionValue__" in e && delete e.__ko__hasDomDataOptionValue__; e.value = d; break; default: p.a.e.set(e, p.c.options.W, d), e.__ko__hasDomDataOptionValue__ = -!0, e.value = "" - } else if (e.tagName == "SELECT") for (var b = e.options.length - 1; b >= 0; b--) { if (p.f.m(e.options[b]) == d) { e.selectedIndex = b; break } } else { if (d === o || d === m) d = ""; e.value = d } - } - }; p.b("ko.selectExtensions", p.f); p.b("ko.selectExtensions.readValue", p.f.m); p.b("ko.selectExtensions.writeValue", p.f.I); - p.r = function () { - function e(a, b) { return a.replace(d, function (a, d) { return b[d] }) } var d = /\[ko_token_(\d+)\]/g, b = /^[\_$a-z][\_$a-z0-9]*(\[.*?\])*(\.[\_$a-z][\_$a-z0-9]*(\[.*?\])*)*$/i, a = ["true", "false"]; return { F: function (a) { - a = p.a.k(a); if (a.length < 3) return {}; for (var b = [], d = o, i, k = a.charAt(0) == "{" ? 1 : 0; k < a.length; k++) { - var j = a.charAt(k); if (d === o) switch (j) { case '"': case "'": case "/": d = k; i = j; break; case "{": d = k; i = "}"; break; case "[": d = k, i = "]" } else if (j == i) { - j = a.substring(d, k + 1); b.push(j); var l = "[ko_token_" + (b.length - -1) + "]", a = a.substring(0, d) + l + a.substring(k + 1); k -= j.length - l.length; d = o - } - } d = {}; a = a.split(","); i = 0; for (k = a.length; i < k; i++) { var l = a[i], q = l.indexOf(":"); q > 0 && q < l.length - 1 && (j = p.a.k(l.substring(0, q)), l = p.a.k(l.substring(q + 1)), j.charAt(0) == "{" && (j = j.substring(1)), l.charAt(l.length - 1) == "}" && (l = l.substring(0, l.length - 1)), j = p.a.k(e(j, b)), l = p.a.k(e(l, b)), d[j] = l) } return d - }, R: function (d) { - var e = p.r.F(d), g = [], i; for (i in e) { - var k = e[i], j; j = k; j = p.a.h(a, p.a.k(j).toLowerCase()) >= 0 ? !1 : j.match(b) !== o; j && (g.length > 0 && g.push(", "), -g.push(i + " : function(__ko_value) { " + k + " = __ko_value; }")) - } g.length > 0 && (d = d + ", '_ko_property_writers' : { " + g.join("") + " } "); return d - } - } - } (); p.b("ko.jsonExpressionRewriting", p.r); p.b("ko.jsonExpressionRewriting.parseJson", p.r.F); p.b("ko.jsonExpressionRewriting.insertPropertyAccessorsIntoJson", p.r.R); p.c = {}; - p.J = function (e, d, b, a) { - function f(a) { return function () { return i[a] } } function h() { return i } var g = !0, a = a || "data-bind", i; new p.j(function () { - var k; if (!(k = typeof d == "function" ? d() : d)) { var j = e.getAttribute(a); try { var l = " { " + p.r.R(j) + " } "; k = p.a.Ha(l, b === o ? window : b) } catch (q) { c(Error("Unable to parse binding attribute.\nMessage: " + q + ";\nAttribute value: " + j)) } } i = k; if (g) for (var n in i) p.c[n] && typeof p.c[n].init == "function" && (0, p.c[n].init)(e, f(n), h, b); for (n in i) p.c[n] && typeof p.c[n].update == "function" && (0, p.c[n].update)(e, -f(n), h, b) - }, o, { disposeWhenNodeIsRemoved: e }); g = !1 - }; p.ua = function (e, d) { d && d.nodeType == m && c(Error("ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node (note: this is a breaking change since KO version 1.05)")); var d = d || window.document.body, b = p.a.da(d, "data-bind"); p.a.g(b, function (a) { p.J(a, o, e) }) }; p.b("ko.bindingHandlers", p.c); p.b("ko.applyBindings", p.ua); p.b("ko.applyBindingsToNode", p.J); - p.a.g(["click"], function (e) { p.c[e] = { init: function (d, b, a, f) { return p.c.event.init.call(this, d, function () { var a = {}; a[e] = b(); return a }, a, f) } } }); p.c.event = { init: function (e, d, b, a) { var f = d() || {}, h; for (h in f) (function () { var f = h; typeof f == "string" && p.a.t(e, f, function (e) { var h, j = d()[f]; if (j) { var l = b(); try { h = j.apply(a, arguments) } finally { if (h !== !0) e.preventDefault ? e.preventDefault() : e.returnValue = !1 } if (l[f + "Bubble"] === !1) e.cancelBubble = !0, e.stopPropagation && e.stopPropagation() } }) })() } }; - p.c.submit = { init: function (e, d, b, a) { typeof d() != "function" && c(Error("The value for a submit binding must be a function to invoke on submit")); p.a.t(e, "submit", function (b) { var h, g = d(); try { h = g.call(a, e) } finally { if (h !== !0) b.preventDefault ? b.preventDefault() : b.returnValue = !1 } }) } }; p.c.visible = { update: function (e, d) { var b = p.a.d(d()), a = e.style.display != "none"; if (b && !a) e.style.display = ""; else if (!b && a) e.style.display = "none" } }; - p.c.enable = { update: function (e, d) { var b = p.a.d(d()); if (b && e.disabled) e.removeAttribute("disabled"); else if (!b && !e.disabled) e.disabled = !0 } }; p.c.disable = { update: function (e, d) { p.c.enable.update(e, function () { return !p.a.d(d()) }) } }; - p.c.value = { init: function (e, d, b) { var a = ["change"], f = b().valueUpdate; f && (typeof f == "string" && (f = [f]), p.a.u(a, f), a = p.a.L(a)); p.a.g(a, function (a) { var f = !1; p.a.Za(a, "after") && (f = !0, a = a.substring(5)); var i = f ? function (a) { setTimeout(a, 0) } : function (a) { a() }; p.a.t(e, a, function () { i(function () { var a = d(), f = p.f.m(e); p.D(a) ? a(f) : (a = b(), a._ko_property_writers && a._ko_property_writers.value && a._ko_property_writers.value(f)) }) }) }) }, update: function (e, d) { - var b = p.a.d(d()), a = p.f.m(e), f = b != a; b === 0 && a !== 0 && a !== "0" && (f = !0); - f && (a = function () { p.f.I(e, b) }, a(), e.tagName == "SELECT" && setTimeout(a, 0)); e.tagName == "SELECT" && (a = p.f.m(e), a !== b && p.a.qa(e, "change")) - } - }; - p.c.options = { update: function (e, d, b) { - e.tagName != "SELECT" && c(Error("options binding applies only to SELECT elements")); var a = p.a.M(p.a.K(e.childNodes, function (a) { return a.tagName && a.tagName == "OPTION" && a.selected }), function (a) { return p.f.m(a) || a.innerText || a.textContent }), f = e.scrollTop, h = p.a.d(d()); p.a.Q(e); if (h) { - var g = b(); typeof h.length != "number" && (h = [h]); if (g.optionsCaption) { var i = document.createElement("OPTION"); i.innerHTML = g.optionsCaption; p.f.I(i, m); e.appendChild(i) } b = 0; for (d = h.length; b < d; b++) { - var i = -document.createElement("OPTION"), k = typeof g.optionsValue == "string" ? h[b][g.optionsValue] : h[b], k = p.a.d(k); p.f.I(i, k); var j = g.optionsText; optionText = typeof j == "function" ? j(h[b]) : typeof j == "string" ? h[b][j] : k; if (optionText === o || optionText === m) optionText = ""; optionText = p.a.d(optionText).toString(); typeof i.innerText == "string" ? i.innerText = optionText : i.textContent = optionText; e.appendChild(i) - } h = e.getElementsByTagName("OPTION"); b = g = 0; for (d = h.length; b < d; b++) p.a.h(a, p.f.m(h[b])) >= 0 && (p.a.ma(h[b], !0), g++); if (f) e.scrollTop = -f - } - } - }; p.c.options.W = "__ko.bindingHandlers.options.optionValueDomData__"; - p.c.selectedOptions = { fa: function (e) { for (var d = [], e = e.childNodes, b = 0, a = e.length; b < a; b++) { var f = e[b]; f.tagName == "OPTION" && f.selected && d.push(p.f.m(f)) } return d }, init: function (e, d, b) { p.a.t(e, "change", function () { var a = d(); p.D(a) ? a(p.c.selectedOptions.fa(this)) : (a = b(), a._ko_property_writers && a._ko_property_writers.value && a._ko_property_writers.value(p.c.selectedOptions.fa(this))) }) }, update: function (e, d) { - e.tagName != "SELECT" && c(Error("values binding applies only to SELECT elements")); var b = p.a.d(d()); if (b && -typeof b.length == "number") for (var a = e.childNodes, f = 0, h = a.length; f < h; f++) { var g = a[f]; g.tagName == "OPTION" && p.a.ma(g, p.a.h(b, p.f.m(g)) >= 0) } - } - }; p.c.text = { update: function (e, d) { var b = p.a.d(d()); if (b === o || b === m) b = ""; typeof e.innerText == "string" ? e.innerText = b : e.textContent = b } }; p.c.html = { update: function (e, d) { var b = p.a.d(d()); p.a.Ya(e, b) } }; p.c.css = { update: function (e, d) { var b = p.a.d(d() || {}), a; for (a in b) if (typeof a == "string") { var f = p.a.d(b[a]); p.a.pa(e, a, f) } } }; - p.c.style = { update: function (e, d) { var b = p.a.d(d() || {}), a; for (a in b) if (typeof a == "string") { var f = p.a.d(b[a]); e.style[a] = f || "" } } }; p.c.uniqueName = { init: function (e, d) { if (d()) e.name = "ko_unique_" + ++p.c.uniqueName.Ba, p.a.S && e.mergeAttributes(document.createElement(""), !1) } }; p.c.uniqueName.Ba = 0; - p.c.checked = { init: function (e, d, b) { p.a.t(e, "click", function () { var a; if (e.type == "checkbox") a = e.checked; else if (e.type == "radio" && e.checked) a = e.value; else return; var f = d(); e.type == "checkbox" && p.a.d(f) instanceof Array ? (a = p.a.h(p.a.d(f), e.value), e.checked && a < 0 ? f.push(e.value) : !e.checked && a >= 0 && f.splice(a, 1)) : p.D(f) ? f() !== a && f(a) : (f = b(), f._ko_property_writers && f._ko_property_writers.checked && f._ko_property_writers.checked(a)) }); e.type == "radio" && !e.name && p.c.uniqueName.init(e, function () { return !0 }) }, update: function (e, -d) { var b = p.a.d(d()); if (e.type == "checkbox") e.checked = b instanceof Array ? p.a.h(b, e.value) >= 0 : b, b && p.a.S && e.mergeAttributes(document.createElement(""), !1); else if (e.type == "radio") e.checked = e.value == b, e.value == b && (p.a.S || p.a.Ma) && e.mergeAttributes(document.createElement(""), !1) } - }; - p.c.attr = { update: function (e, d) { var b = p.a.d(d()) || {}, a; for (a in b) if (typeof a == "string") { var f = p.a.d(b[a]); f === !1 || f === o || f === m ? e.removeAttribute(a) : e.setAttribute(a, f.toString()) } } }; - p.aa = function () { this.renderTemplate = function () { c("Override renderTemplate in your ko.templateEngine subclass") }; this.isTemplateRewritten = function () { c("Override isTemplateRewritten in your ko.templateEngine subclass") }; this.rewriteTemplate = function () { c("Override rewriteTemplate in your ko.templateEngine subclass") }; this.createJavaScriptEvaluatorBlock = function () { c("Override createJavaScriptEvaluatorBlock in your ko.templateEngine subclass") } }; p.b("ko.templateEngine", p.aa); - p.G = function () { - var e = /(<[a-z]+\d*(\s+(?!data-bind=)[a-z0-9\-]+(=(\"[^\"]*\"|\'[^\']*\'))?)*\s+)data-bind=(["'])([\s\S]*?)\5/gi; return { Ga: function (d, b) { b.isTemplateRewritten(d) || b.rewriteTemplate(d, function (a) { return p.G.Qa(a, b) }) }, Qa: function (d, b) { return d.replace(e, function (a, d, e, g, i, k, j) { a = p.r.R(j); return b.createJavaScriptEvaluatorBlock("ko.templateRewriting.applyMemoizedBindingsToNextSibling(function() { return (function() { return { " + a + " } })() })") + d }) }, - va: function (d) { return p.l.V(function (b, a) { b.nextSibling && p.J(b.nextSibling, d, a) }) } - } - } (); p.b("ko.templateRewriting", p.G); p.b("ko.templateRewriting.applyMemoizedBindingsToNextSibling", p.G.va); - (function () { - function e(b, a, e, h, g) { var i = p.a.d(h), g = g || {}, k = g.templateEngine || d; p.G.Ga(e, k); e = k.renderTemplate(e, i, g); (typeof e.length != "number" || e.length > 0 && typeof e[0].nodeType != "number") && c("Template engine must return an array of DOM nodes"); e && p.a.g(e, function (a) { p.l.sa(a, [h]) }); switch (a) { case "replaceChildren": p.a.Xa(b, e); break; case "replaceNode": p.a.ka(b, e); break; case "ignoreTargetNode": break; default: c(Error("Unknown renderMode: " + a)) } g.afterRender && g.afterRender(e, h); return e } var d; p.na = function (b) { - b != -m && !(b instanceof p.aa) && c("templateEngine must inherit from ko.templateEngine"); d = b - }; p.X = function (b, a, f, h, g) { - f = f || {}; (f.templateEngine || d) == m && c("Set a template engine before calling renderTemplate"); g = g || "replaceChildren"; if (h) { - var i = h.nodeType ? h : h.length > 0 ? h[0] : o; return new p.j(function () { var d = typeof b == "function" ? b(a) : b, d = e(h, g, d, a, f); g == "replaceNode" && (h = d, i = h.nodeType ? h : h.length > 0 ? h[0] : o) }, o, { disposeWhen: function () { return !i || !p.a.P(i) }, disposeWhenNodeIsRemoved: i && g == "replaceNode" ? i.parentNode : -i - }) - } else return p.l.V(function (d) { p.X(b, a, f, d, "replaceNode") }) - }; p.Wa = function (b, a, d, h) { return new p.j(function () { var g = p.a.d(a) || []; typeof g.length == "undefined" && (g = [g]); g = p.a.K(g, function (a) { return d.includeDestroyed || !a._destroy }); p.a.la(h, g, function (a) { var g = typeof b == "function" ? b(a) : b; return e(o, "ignoreTargetNode", g, a, d) }, d) }, o, { disposeWhenNodeIsRemoved: h }) }; p.c.template = { update: function (b, a, d, e) { - a = p.a.d(a()); d = typeof a == "string" ? a : a.name; if (typeof a.foreach != "undefined") e = p.Wa(d, a.foreach || [], -{ templateOptions: a.templateOptions, afterAdd: a.afterAdd, beforeRemove: a.beforeRemove, includeDestroyed: a.includeDestroyed, afterRender: a.afterRender }, b); else var g = a.data, e = p.X(d, typeof g == "undefined" ? e : g, { templateOptions: a.templateOptions, afterRender: a.afterRender }, b); (a = p.a.e.get(b, "__ko__templateSubscriptionDomDataKey__")) && typeof a.n == "function" && a.n(); p.a.e.set(b, "__ko__templateSubscriptionDomDataKey__", e) - } - } - })(); p.b("ko.setTemplateEngine", p.na); p.b("ko.renderTemplate", p.X); - p.a.w = function (e, d, b) { - if (b === m) return p.a.w(e, d, 1) || p.a.w(e, d, 10) || p.a.w(e, d, Number.MAX_VALUE); else { - for (var e = e || [], d = d || [], a = e, f = d, h = [], g = 0; g <= f.length; g++) h[g] = []; for (var g = 0, i = Math.min(a.length, b); g <= i; g++) h[0][g] = g; g = 1; for (i = Math.min(f.length, b); g <= i; g++) h[g][0] = g; for (var i = a.length, k, j = f.length, g = 1; g <= i; g++) { var l = Math.min(j, g + b); for (k = Math.max(1, g - b); k <= l; k++) h[k][g] = a[g - 1] === f[k - 1] ? h[k - 1][g - 1] : Math.min(h[k - 1][g] === m ? Number.MAX_VALUE : h[k - 1][g] + 1, h[k][g - 1] === m ? Number.MAX_VALUE : h[k][g - 1] + 1) } b = -e.length; a = d.length; f = []; g = h[a][b]; if (g === m) h = o; else { for (; b > 0 || a > 0; ) { i = h[a][b]; k = a > 0 ? h[a - 1][b] : g + 1; j = b > 0 ? h[a][b - 1] : g + 1; l = a > 0 && b > 0 ? h[a - 1][b - 1] : g + 1; if (k === m || k < i - 1) k = g + 1; if (j === m || j < i - 1) j = g + 1; l < i - 1 && (l = g + 1); k <= j && k < l ? (f.push({ status: "added", value: d[a - 1] }), a--) : (j < k && j < l ? f.push({ status: "deleted", value: e[b - 1] }) : (f.push({ status: "retained", value: e[b - 1] }), a--), b--) } h = f.reverse() } return h - } - }; p.b("ko.utils.compareArrays", p.a.w); - (function () { - function e(d, b, a) { var e = [], d = p.j(function () { var d = b(a) || []; e.length > 0 && p.a.ka(e, d); e.splice(0, e.length); p.a.u(e, d) }, o, { disposeWhenNodeIsRemoved: d, disposeWhen: function () { return e.length == 0 || !p.a.P(e[0]) } }); return { Oa: e, j: d} } p.a.la = function (d, b, a, f) { - for (var b = b || [], f = f || {}, h = p.a.e.get(d, "setDomNodeChildrenFromArrayMapping_lastMappingResult") === m, g = p.a.e.get(d, "setDomNodeChildrenFromArrayMapping_lastMappingResult") || [], i = p.a.M(g, function (a) { return a.wa }), k = p.a.w(i, b), b = [], j = 0, l = [], i = [], q = -o, n = 0, v = k.length; n < v; n++) switch (k[n].status) { - case "retained": var r = g[j]; b.push(r); r.B.length > 0 && (q = r.B[r.B.length - 1]); j++; break; case "deleted": g[j].j.n(); p.a.g(g[j].B, function (a) { l.push({ element: a, index: n, value: k[n].value }); q = a }); j++; break; case "added": var s = e(d, a, k[n].value), r = s.Oa; b.push({ wa: k[n].value, B: r, j: s.j }); for (var s = 0, w = r.length; s < w; s++) { - var t = r[s]; i.push({ element: t, index: n, value: k[n].value }); q == o ? d.firstChild ? d.insertBefore(t, d.firstChild) : d.appendChild(t) : q.nextSibling ? d.insertBefore(t, -q.nextSibling) : d.appendChild(t); q = t - } - } p.a.g(l, function (a) { p.v(a.element) }); a = !1; if (!h) { if (f.afterAdd) for (n = 0; n < i.length; n++) f.afterAdd(i[n].element, i[n].index, i[n].value); if (f.beforeRemove) { for (n = 0; n < l.length; n++) f.beforeRemove(l[n].element, l[n].index, l[n].value); a = !0 } } a || p.a.g(l, function (a) { a.element.parentNode && a.element.parentNode.removeChild(a.element) }); p.a.e.set(d, "setDomNodeChildrenFromArrayMapping_lastMappingResult", b) - } - })(); p.b("ko.utils.setDomNodeChildrenFromArrayMapping", p.a.la); - p.T = function () { - this.q = function () { if (typeof jQuery == "undefined" || !jQuery.tmpl) return 0; if (jQuery.tmpl.tag) { if (jQuery.tmpl.tag.tmpl && jQuery.tmpl.tag.tmpl.open && jQuery.tmpl.tag.tmpl.open.toString().indexOf("__") >= 0) return 3; return 2 } return 1 } (); this.getTemplateNode = function (d) { var b = document.getElementById(d); b == o && c(Error("Cannot find template with ID=" + d)); return b }; var e = RegExp("__ko_apos__", "g"); this.renderTemplate = function (d, b, a) { - a = a || {}; this.q == 0 && c(Error("jquery.tmpl not detected.\nTo use KO's default template engine, reference jQuery and jquery.tmpl. See Knockout installation documentation for more details.")); - if (this.q == 1) return d = '