37 Commits

Author SHA1 Message Date
Stephan ec45bfb1d5 Fix the build script so it works! 2016-12-07 17:46:02 +01:00
Sebastiaan Janssen 1e5a959f25 7.5.5 upgrade was OK after all 2016-12-07 13:48:36 +01:00
Sebastiaan Janssen e1529e7f8f Html Agility Pack binding redirect missing 2016-12-07 13:31:04 +01:00
Sebastiaan Janssen 47123a7d0a Revert "Upgrade to Umbraco 7.5.5"
This reverts commit a0f27739b7.
2016-12-07 12:59:03 +01:00
Sebastiaan Janssen a0f27739b7 Upgrade to Umbraco 7.5.5 2016-12-07 11:57:20 +01:00
Sebastiaan Janssen 93474811f1 Replace all UmbracoContext.Current.Application with ApplicationContext.Current
UmbracoContext.Current == is based on a web request, if any code executes on a background thread or non-request thread then UmbracoContext.Current is null!
2016-11-25 21:04:49 +01:00
Sebastiaan Janssen 6f50fad596 Update all SqlHelper instanced to use the umbraco.Businesslogic version and wrapped them all in usings where necessary 2016-11-25 20:54:32 +01:00
Sebastiaan Janssen 538834dcc3 Update all SqlHelper instanced to use the umbraco.Businesslogic version and wrapped them all in usings where necessary 2016-11-25 20:49:30 +01:00
Sebastiaan Janssen 389ddaabb7 Disable Hangfire to see if that's causing the memory issues 2016-11-08 11:35:48 +01:00
Sebastiaan Janssen c7d2d53902 Get the email and name differently 2016-11-07 22:38:45 +01:00
Sebastiaan Janssen 367a98be56 Hangfire wasn't too happy with System.Net.MailAddress 2016-11-07 15:35:00 +01:00
Sebastiaan Janssen 2128fb883a Refactor MarkAsSolutionReminder to be a bit more efficient 2016-11-07 12:36:28 +01:00
Sebastiaan Janssen 729da39c87 Enable sending of mail 2016-10-31 13:39:14 +01:00
Sebastiaan Janssen 7e82ea86ec Little refactor and bugfix 2016-10-30 12:47:41 +01:00
Sebastiaan Janssen ddac31b8bc Ignore Hangfire route so Umbraco doesn't pick it up 2016-10-30 12:13:27 +01:00
Sebastiaan Janssen 491b5527ae Test solution reminder notification 2016-10-30 11:57:19 +01:00
Sebastiaan Janssen e63a9d4b16 Move docs from UaaS to UCloud 2016-10-27 21:11:00 +02:00
Sebastiaan Janssen 6dac0ad4e8 OUR-426 Rename Umbraco as a Service forum to Umbraco Cloud forum
#OUR-426 Fixed
2016-10-27 21:01:52 +02:00
Sebastiaan Janssen 19a737a770 OUR-424 Update "works on UaaS" to "works on Umbraco Cloud"
#OUR-424 Fixed
2016-10-27 20:42:21 +02:00
Simon Busborg c083576ef3 Fixed some cosmetic bugs on smaller devices. 2016-10-24 12:14:52 +02:00
Simon Busborg 82ba42b1aa Fixed button bug after flexbox 2016-10-24 09:22:19 +02:00
Sebastiaan Janssen f39bbc2979 Adds client to solution so task runner explorer can be used to build the client-side files in VS 2016-10-23 13:42:58 +02:00
Sebastiaan Janssen f04cf5bb40 Correcting the wrong version references 2016-10-22 12:51:37 +02:00
Sebastiaan Janssen 12727c7a50 Upgrade to 7.5.4 2016-10-22 11:56:47 +02:00
Sebastiaan Janssen 22a382ddad Added padding to wrong class 2016-10-17 14:04:56 +02:00
Sebastiaan Janssen 4e00102bad Some quick fixes for misaligned buttons 2016-10-17 13:53:31 +02:00
Sebastiaan Janssen 75039c5198 Correct Google tracking code 2016-10-17 13:23:11 +02:00
Sebastiaan Janssen cf048ebc01 Some small corrections to the download page 2016-10-17 09:30:42 +02:00
Sebastiaan Janssen ec6df31b0c Merge branch 'feature-release-downloadbutton' 2016-10-17 09:21:37 +02:00
Simon Busborg 9a36eea042 Removed header for double information about download 2016-10-10 12:04:10 +02:00
Simon Busborg e933ea81d7 Clean up of unused styling 2016-10-10 11:42:00 +02:00
Simon Busborg 7ffb0286e3 Fixes: OUR-404 Update release pages to have a far more prominent call to action for download and install instructions 2016-10-10 10:01:35 +02:00
Simon Busborg 100fa68a15 Added line-height to notifications 2016-10-10 10:00:31 +02:00
Simon Busborg 612de0e016 Updated buttons to fix Webkit bug 2016-10-10 10:00:14 +02:00
Simon Busborg 427e5b91af added flexbox to project 2016-10-10 09:59:54 +02:00
Simon Busborg 3299aee2bd Added a utility file with flexbox 2016-10-10 09:59:33 +02:00
Simon Busborg 39c1df41a7 Updated packages and dependency versions for gulp, outcommented “combine media queries” that broke the task runner 2016-10-10 09:59:19 +02:00
833 changed files with 135065 additions and 133143 deletions
+1
View File
@@ -63,3 +63,4 @@ OurUmbraco.Site/[Aa]ssets/js/app.min.js
OurUmbraco.Site/App_Data/migrations/*.txt OurUmbraco.Site/App_Data/migrations/*.txt
OurUmbraco.Site/apidocs/ OurUmbraco.Site/apidocs/
OurUmbraco.Site/App_Data/Documentation/ OurUmbraco.Site/App_Data/Documentation/
OurUmbraco.Site/App_Data/NotificationTest/
+3 -3
View File
@@ -1,4 +1,4 @@
<!doctype html> <!doctype html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]--> <!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]--> <!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]-->
<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]--> <!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]-->
@@ -1104,8 +1104,8 @@ namespace TestProject.Controllers
<option class="features" value="1150">our.umb dev forum - Features</option> <option class="features" value="1150">our.umb dev forum - Features</option>
<option class="general" value="5668">Core - General</option> <option class="general" value="5668">Core - General</option>
<option class="4.1feedback" value="5669">Core - 4.1 feedback</option> <option class="4.1feedback" value="5669">Core - 4.1 feedback</option>
<option class="generalquestions" value="73967">Umbraco as a Service - General Questions</option> <option class="generalquestions" value="73967">Umbraco Cloud - General Questions</option>
<option class="issues" value="73968">Umbraco as a Service - Issues</option> <option class="issues" value="73968">Umbraco Cloud - Issues</option>
</select> </select>
</div> </div>
+3 -3
View File
@@ -1,4 +1,4 @@
<!doctype html> <!doctype html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]--> <!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]--> <!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]-->
<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]--> <!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]-->
@@ -624,8 +624,8 @@ grunt</pre>
<div class="package-compatibility-versions"> <div class="package-compatibility-versions">
<div class="versions"> <div class="versions">
<span class="smiley joyous">Umbraco as a Service (Works)</span> <span class="smiley joyous">Umbraco Cloud (Works)</span>
<span class="smiley untested">Umbraco as a Service (Not working yet)</span> <span class="smiley untested">Umbraco Cloud (Not working yet)</span>
<span class="smiley untested"> 7.2.x (untested)</span> <span class="smiley untested"> 7.2.x (untested)</span>
<span class="smiley happy"> 7.1.x (91%)</span> <span class="smiley happy"> 7.1.x (91%)</span>
<span class="smiley joyous"> 7.0.x (100%)</span> <span class="smiley joyous"> 7.0.x (100%)</span>
+2 -2
View File
@@ -1,4 +1,4 @@
var gulp = require('gulp'), var gulp = require('gulp'),
gutil = require('gulp-util'), gutil = require('gulp-util'),
sass = require('gulp-sass'), sass = require('gulp-sass'),
jshint = require('gulp-jshint'), jshint = require('gulp-jshint'),
@@ -57,7 +57,7 @@ gulp.task('css', function () {
.pipe(sass()) .pipe(sass())
.on('error', gutil.log) .on('error', gutil.log)
.pipe(autoprefixer('last 1 version', 'ie 9', 'ios 7')) .pipe(autoprefixer('last 1 version', 'ie 9', 'ios 7'))
.pipe(cmq({log: true})) // .pipe(cmq({log: true}))
.pipe(rename({suffix: '.min'})) .pipe(rename({suffix: '.min'}))
.pipe(minifyCss()) .pipe(minifyCss())
.pipe(gulp.dest(settings.build + '/assets/css')) .pipe(gulp.dest(settings.build + '/assets/css'))
+8 -13
View File
@@ -7,17 +7,16 @@
"dependencies": { "dependencies": {
}, },
"devDependencies": { "devDependencies": {
"gulp": "3.8.x", "gulp": "^3.9.1",
"gulp-util": "2.2.x", "gulp-util": "3.0.x",
"gulp-watch": "0.6.x", "gulp-watch": "0.6.x",
"gulp-minify-css": "1.1.x", "gulp-minify-css": "1.1.x",
"node-sass": "3.2.x", "gulp-sass": "^2.2.0",
"gulp-sass": "2.0.x", "gulp-combine-media-queries": "0.2.x",
"gulp-combine-media-queries": "0.1.x",
"gulp-imagemin": "0.6.x", "gulp-imagemin": "0.6.x",
"gulp-autoprefixer": "2.3.1", "gulp-autoprefixer": "^3.1.0",
"gulp-uglify": "0.3.x", "gulp-uglify": "^1.5.3",
"gulp-jshint": "1.6.x", "gulp-jshint": "2.0.0",
"gulp-concat": "2.2.x", "gulp-concat": "2.2.x",
"jshint-stylish": "0.2.x", "jshint-stylish": "0.2.x",
"gulp-clean": "0.3.x", "gulp-clean": "0.3.x",
@@ -28,9 +27,5 @@
"test": "gulp build --verbose" "test": "gulp build --verbose"
}, },
"author": "umbraco", "author": "umbraco",
"license": "MIT", "license": "MIT"
"repository": {
"type": "git",
"url": "http://github.com/devdk/gulp-workflow.git"
}
} }
@@ -4,6 +4,7 @@
border: none !important; border: none !important;
padding: 20px; padding: 20px;
line-height: 1.5;
@include colorset(alertbar); @include colorset(alertbar);
@@ -1,7 +1,11 @@
button.button, .button, a.button { button.button, .button, a.button {
background: $color-blue; background: $color-blue;
padding: 14px 40px; padding: 12px 40px;
display: inline-block;
display: inline-flex;
align-items: center;
justify-content: center;
text-decoration: none; text-decoration: none;
border: none; border: none;
border-radius: 36px; border-radius: 36px;
@@ -11,8 +15,7 @@ button.button, .button, a.button {
color: #fff; color: #fff;
text-align: center; text-align: center;
font-size: 1rem; font-size: 14px;
line-height: 1;
margin: 0; margin: 0;
@@ -103,7 +106,7 @@ button.button, .button, a.button {
&.large { &.large {
font-size: 1.2rem; font-size: 1.175rem;
} }
File diff suppressed because it is too large Load Diff
@@ -1,475 +1,476 @@
.markdown-editor { .markdown-editor {
position: fixed; position: fixed;
bottom: -100%; bottom: -100%;
max-height: 100%; max-height: 100%;
width: 100%; width: 100%;
padding: .2rem; padding: .2rem;
background-color: rgba(darken(#fff, 1%), .94); background-color: rgba(darken(#fff, 1%), .94);
box-shadow: 0px -2px 6px 0px rgba(0, 0, 0, 0.08); box-shadow: 0px -2px 6px 0px rgba(0, 0, 0, 0.08);
transition: bottom .6s $cubicSearch, top .6s $cubicSearch; transition: bottom .6s $cubicSearch, top .6s $cubicSearch;
z-index: 800; z-index: 800;
@media (max-width: $xs) { @media (max-width: $xs) {
top: 100%; top: 100%;
padding: 20px 0 0; padding: 20px 0 0;
} }
&.write { &.write {
bottom:0px; bottom:0px;
overflow-y: scroll; overflow-y: scroll;
visibility: visible; visibility: visible;
@media (max-width: $xs) { @media (max-width: $xs) {
top: 0; top: 0;
} }
} }
&.mobile-preview { &.mobile-preview {
@media (max-width: $md) { @media (max-width: $md) {
#input-container { #input-container {
display: none; display: none;
} }
#preview-container { #preview-container {
display: block; display: block;
} }
} }
} }
#preview-container { #preview-container {
@media (max-width: $md) { @media (max-width: $md) {
display: none; display: none;
} }
} }
input, textarea, select{ input, textarea, select{
border: 2px solid #E4E8E9; border: 2px solid #E4E8E9;
color: #000; color: #000;
&:focus, &:active{ &:focus, &:active{
outline: none; outline: none;
border-color: $color-green; border-color: $color-green;
} }
&.warning { &.warning {
border-color: $color-red !important; border-color: $color-red !important;
} }
} }
.wmd-button { .wmd-button {
position: relative; position: relative;
margin-right: 15px; margin-right: 15px;
left: 0 !important; left: 0 !important;
font-size: 1.4em; font-size: 1.4em;
top: 10px; top: 10px;
cursor: pointer; cursor: pointer;
float: left; float: left;
border-radius: 20px; border-radius: 20px;
transition: top 300ms $cubicSearch, opacity 300ms $cubicSearch; transition: top 300ms $cubicSearch, opacity 300ms $cubicSearch;
} }
.show { .show {
.wmd-button { .wmd-button {
@media (min-width: $md){ @media (min-width: $md){
top: 10px; top: 10px;
opacity: .9; opacity: .9;
} }
} }
} }
.reply-to { .reply-to {
p { p {
font-size: 1rem; font-size: 1rem;
overflow: hidden; overflow: hidden;
color: darken($color-space, 25%); color: darken($color-space, 25%);
background: transparent; background: transparent;
} }
span { span {
font-weight: 800; font-weight: 800;
} }
} }
#wmd-button-bar { #wmd-button-bar {
position:relative; position:relative;
height: 30px; height: 30px;
@media (max-width: $xs) { @media (max-width: $xs) {
display:none; display:none;
} }
} }
.input-row { .input-row {
label { label {
display: block; display: block;
margin-bottom: 5px; margin-bottom: 5px;
color: darken($color-space, 10%); color: darken($color-space, 10%);
font-size: .9rem; font-size: .9rem;
} }
} }
.wmd-button-row { .wmd-button-row {
list-style: none; list-style: none;
li { li {
&:hover { &:hover {
span { span {
color:black; color:black;
} }
} }
span { span {
background-image: none; background-image: none;
color: #727272; color: #727272;
transition: color .2s ease-in; transition: color .2s ease-in;
&:before { &:before {
font-family: "our-umbraco" !important; font-family: "our-umbraco" !important;
content: attr(data-icon); content: attr(data-icon);
font-style: normal !important; font-style: normal !important;
font-weight: normal !important; font-weight: normal !important;
font-variant: normal !important; font-variant: normal !important;
text-transform: none !important; text-transform: none !important;
speak: none; speak: none;
line-height: 1; line-height: 1;
-webkit-font-smoothing: antialiased; -webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale; -moz-osx-font-smoothing: grayscale;
} }
} }
} }
#wmd-bold-button { #wmd-bold-button {
span { span {
@extend .our-icon-bold; @extend .our-icon-bold;
} }
} }
#wmd-italic-button { #wmd-italic-button {
span { span {
@extend .our-icon-italic; @extend .our-icon-italic;
} }
} }
#wmd-bold-button { #wmd-bold-button {
span { span {
@extend .our-icon-bold; @extend .our-icon-bold;
} }
} }
#wmd-link-button { #wmd-link-button {
span { span {
@extend .our-icon-hyperlink; @extend .our-icon-hyperlink;
} }
} }
#wmd-quote-button { #wmd-quote-button {
span { span {
@extend .our-icon-quote; @extend .our-icon-quote;
} }
} }
#wmd-quote-button { #wmd-quote-button {
span { span {
@extend .our-icon-quote; @extend .our-icon-quote;
} }
} }
#wmd-code-button { #wmd-code-button {
span { span {
@extend .our-icon-code; @extend .our-icon-code;
} }
} }
#wmd-image-button { #wmd-image-button {
span { span {
@extend .our-icon-picture; @extend .our-icon-picture;
} }
} }
#wmd-olist-button { #wmd-olist-button {
span { span {
@extend .our-icon-ol; @extend .our-icon-ol;
} }
} }
#wmd-ulist-button { #wmd-ulist-button {
span { span {
@extend .our-icon-ul; @extend .our-icon-ul;
} }
} }
#wmd-heading-button { #wmd-heading-button {
span { span {
@extend .our-icon-header; @extend .our-icon-header;
} }
} }
#wmd-hr-button { #wmd-hr-button {
span { span {
@extend .our-icon-hr; @extend .our-icon-hr;
} }
} }
#wmd-undo-button { #wmd-undo-button {
span { span {
@extend .our-icon-undo; @extend .our-icon-undo;
} }
} }
#wmd-redo-button { #wmd-redo-button {
span { span {
@extend .our-icon-redo; @extend .our-icon-redo;
} }
} }
} }
.wmd-spacer { .wmd-spacer {
float: left; float: left;
position: relative; position: relative;
width: 27px; width: 27px;
display: block; display: block;
opacity: 0; opacity: 0;
height: 20px; height: 20px;
@media (max-width:$md) { @media (max-width:$md) {
display: none; display: none;
} }
} }
#wmd-input { #wmd-input {
height: 300px; height: 300px;
width: 100%; width: 100%;
padding: .5rem; padding: .5rem;
font-size: 1rem; font-size: 1rem;
color: $color-text; color: $color-text;
background: white; background: white;
border: 2px solid #E4E8E9; border: 2px solid #E4E8E9;
@include transition(border-color, .2s); @include transition(border-color, .2s);
@media (max-width: $xs) { @media (max-width: $xs) {
height: 152px; height: 152px;
} }
&:focus { &:focus {
border-color: $color-green; border-color: $color-green;
} }
} }
#wmd-preview { #wmd-preview {
width: 100%; width: 100%;
min-height: 300px; min-height: 300px;
max-height: 300px; max-height: 300px;
overflow-y: scroll; overflow-y: scroll;
padding: .5rem 20px; padding: .5rem 20px;
font-size: .8rem; font-size: .8rem;
color: #000; color: #000;
background: darken(#F5F7F7, 5%); background: darken(#F5F7F7, 5%);
@media (max-width: $xs) { @media (max-width: $xs) {
max-height: 150px; max-height: 150px;
min-height: 150px; min-height: 150px;
margin-bottom: 0; margin-bottom: 0;
} }
} }
.markdown-close { .markdown-close {
position: absolute; position: absolute;
right: 1.5rem; right: 1.5rem;
top: 2rem; top: 2rem;
font-size: 28px; font-size: 28px;
cursor: pointer; cursor: pointer;
opacity: .6; opacity: .6;
@include transition(opacity, .3s); @include transition(opacity, .3s);
@media (min-width: $md) { @media (min-width: $md) {
top: 1.5rem; top: 1.5rem;
} }
&:hover { &:hover {
opacity: 1; opacity: 1;
} }
} }
.draft { .draft {
position: fixed; position: fixed;
bottom: -40px; bottom: -40px;
right: 30px; right: 30px;
background-color: $color-green; background-color: $color-green;
color:white; color:white;
padding: 12px 20px; padding: 12px 20px;
cursor: pointer; cursor: pointer;
opacity: 0; opacity: 0;
font-size: .9rem; font-size: .9rem;
font-weight: bold; font-weight: bold;
transition: opacity .3s $cubicSearch, bottom .6s $cubicSearch, box-shadow .2s ease-in-out; transition: opacity .3s $cubicSearch, bottom .6s $cubicSearch, box-shadow .2s ease-in-out;
&.show { &.show {
bottom: 30px; bottom: 30px;
opacity: 1; opacity: 1;
&:hover { &:hover {
background: lighten($color-green, 5%); background: lighten($color-green, 5%);
@extend .BoxShadow; @extend .BoxShadow;
} }
} }
} }
.markdown-control { .markdown-control {
font-family: $font-family; font-family: $font-family;
font-size: .8rem; font-size: .8rem;
-webkit-appearance: none; -webkit-appearance: none;
@media (max-width: $xs) { @media (max-width: $xs) {
padding: 5px !important; padding: 5px !important;
} }
} }
#topic-title { #topic-title {
padding: .5rem; padding: .5rem;
font-size: .8rem; font-size: .8rem;
overflow: hidden; overflow: hidden;
color: #000; color: #000;
background: #fff; background: #fff;
width: 100%; width: 100%;
} }
select { select {
position: relative; position: relative;
border: none; border: none;
border-radius: 0; border-radius: 0;
padding: .5rem; padding: .5rem;
font-size: .8rem; font-size: .8rem;
overflow: hidden; overflow: hidden;
color: #000; color: #000;
background: #fff; background: #fff;
width: 100%; width: 100%;
border: 2px solid #E4E8E9; border: 2px solid #E4E8E9;
@media (max-width: $xs) { @media (max-width: $xs) {
margin-top: 20px; margin-top: 20px;
} }
&::after { &::after {
position: absolute; position: absolute;
display: block; display: block;
top: 0; top: 0;
right: 0; right: 0;
content: "<"; content: "<";
color: black; color: black;
} }
} }
#topic-category { #topic-category {
option.frontend { option.frontend {
background: #4ea7ff; background: #4ea7ff;
color: #fff; color: #fff;
} }
option.core { option.core {
background: #ff661b; background: #ff661b;
color: #fff; color: #fff;
} }
option.azure { option.azure {
background: #1ed45c; background: #1ed45c;
color: #fff; color: #fff;
} }
} }
#topic-submit { #topic-submit {
border: none; border: none;
background: $color-green; background: $color-green;
color: white; color: white;
padding: 10px; padding: 10px !important;
width: 100%; padding-left: 32px;
max-width: 140px; width: 100%;
font-family: $font-family; max-width: 140px;
cursor: pointer; font-family: $font-family;
cursor: pointer;
font-size: 1rem;
font-size: 1rem;
&:hover {
background: lighten($color-green, 5%); &:hover {
} background: lighten($color-green, 5%);
} }
}
#mobile-preview {
border: none; #mobile-preview {
background: none; border: none;
-webkit-appearance:none; background: none;
text-align: right; -webkit-appearance:none;
float: right; text-align: right;
opacity: .4; float: right;
cursor: pointer; opacity: .4;
@include transition(opacity, .3s); cursor: pointer;
@include transition(opacity, .3s);
i {
font-size: 24px; i {
display: inline-block; font-size: 24px;
transform: translate(-3px, 5px); display: inline-block;
transform: translate(-3px, 5px);
}
}
span {
font-size: 14px; span {
} font-size: 14px;
}
&:hover {
opacity: 1; &:hover {
} opacity: 1;
}
@media (max-width: $xs) {
margin-bottom: 10px; @media (max-width: $xs) {
} margin-bottom: 10px;
} }
}
&.mobile-preview {
&.mobile-preview {
#wmd-preview {
@media (max-width: $md) { #wmd-preview {
margin-bottom: 4px; @media (max-width: $md) {
} margin-bottom: 4px;
} }
}
#mobile-preview {
color: $color-our; #mobile-preview {
opacity: 1; color: $color-our;
} opacity: 1;
} }
}
}
}
.wmd-prompt-background {
background-color: black; .wmd-prompt-background {
} background-color: black;
}
#insert-image-dialog {
position: fixed; #insert-image-dialog {
z-index: 1001; position: fixed;
@extend .copy-link-wrapper; z-index: 1001;
&.show { @extend .copy-link-wrapper;
clip: auto; &.show {
opacity: 1; clip: auto;
top: 50%; opacity: 1;
left: 50%; top: 50%;
} left: 50%;
} }
}
.wmd-prompt-dialog {
@extend .copy-link-wrapper; .wmd-prompt-dialog {
opacity: 1; @extend .copy-link-wrapper;
clip: auto; opacity: 1;
margin: 0 !important; clip: auto;
input[type="text"] { margin: 0 !important;
text-align: left; input[type="text"] {
} text-align: left;
} }
}
.markdown-spacer {
position: relative; .markdown-spacer {
height: 0px; position: relative;
transition: height .6s $cubicSearch; height: 0px;
&.write { transition: height .6s $cubicSearch;
height: 500px; &.write {
} height: 500px;
}
} }
@@ -7,9 +7,9 @@
input { input {
-webkit-appearance: none; -webkit-appearance: none;
border-radius: 0; border-radius: 0;
border: 1px solid darken(whitesmoke, 15%); border: 1px solid darken(whitesmoke, 15%);
padding: 20px 6px 20px 6px; padding: 20px 10px 20px 10px;
outline: none; outline: none;
display: block; display: block;
width: 100%; width: 100%;
@@ -529,6 +529,8 @@
font-size: .7rem; font-size: .7rem;
letter-spacing: .5px; letter-spacing: .5px;
text-align: center;
transform: translate(-50%, -50%); transform: translate(-50%, -50%);
cursor: pointer; cursor: pointer;
@@ -63,11 +63,11 @@ html {
display: inline-block; display: inline-block;
overflow: hidden; overflow: hidden;
width: 100%; width: 100%;
max-width: $sb-desktop / 100% * $sb-width;
text-align: center; text-align: center;
@media (min-width: $md) { @media (min-width: $md) {
float: right; float: right;
max-width: $sb-desktop / 100% * $sb-width;
} }
} }
} }
@@ -80,7 +80,7 @@ html {
padding-bottom: 200px; padding-bottom: 200px;
@media (max-width:992px) { @media (max-width:992px) {
display: block; display: block;
width: 100%; width: 100%;
@@ -96,10 +96,10 @@ html {
@media (min-width: 2100px) { @media (min-width: 2100px) {
width:100% - $sb-retina-width; width:100% - $sb-retina-width;
} }
.main-content { .main-content {
display: block; display: block;
width: 100%; width: 100%;
padding-left: 20px; padding-left: 20px;
padding-right: 20px; padding-right: 20px;
padding-top: 20px; padding-top: 20px;
@@ -173,7 +173,7 @@ html {
cursor: pointer; cursor: pointer;
} }
@media (max-width: 992px) { @media (max-width: 992px) {
border-left: none; border-left: none;
background-color: lighten($color-our,10%); background-color: lighten($color-our,10%);
padding-top: 10px; padding-top: 10px;
padding-bottom: 10px; padding-bottom: 10px;
@@ -50,6 +50,11 @@
@media (min-width: $md) { @media (min-width: $md) {
margin-bottom: 0; margin-bottom: 0;
} }
span {
padding-top: 5px;
padding-left: 5px;
}
} }
} }
+68 -37
View File
@@ -91,16 +91,20 @@
&-head { &-head {
flex-direction: row; display: none;
padding: 20px 15px; @media (min-width: $md) {
border-bottom: 1px solid whitesmoke; display: flex;
font-size: .8rem; padding: 20px 15px;
text-transform: uppercase; border-bottom: 1px solid whitesmoke;
font-weight: bold;
letter-spacing: .5px; font-size: .8rem;
text-transform: uppercase;
font-weight: bold;
letter-spacing: .5px;
}
} }
@@ -112,19 +116,6 @@
display: flex; display: flex;
flex-direction: column; flex-direction: column;
small {
color: darken($color-space, 25%);
font-size: 1rem;
margin-bottom: .2rem;
}
span {
font-size: .8rem;
color: $color-space;
}
} }
} }
@@ -135,18 +126,25 @@
padding: 25px 15px; padding: 25px 15px;
display: flex; display: flex;
flex-direction: row; flex-direction: column;
align-items: center; align-items: flex-start;
border-bottom: 1px solid rgba($color-space, .11); border-bottom: 1px solid rgba($color-space, .11);
@media (min-width: $md) {
flex-direction: row;
align-items: center;
}
.topic { .topic {
font-size: .95rem; font-size: 1.15rem;
line-height: 1.3; line-height: 1.3;
order: 2;
h3 { h3 {
word-break: break-all; font-weight: 600;
} }
a { a {
@@ -181,8 +179,9 @@
@media (min-width: $md) { @media (min-width: $md) {
font-size: 1.15rem; h3 {
line-height: 1.3; font-weight: 100;
}
span { span {
font-size: .9rem; font-size: .9rem;
@@ -220,35 +219,62 @@
.topic { .topic {
flex: 0 0 50%; order: 2;
margin-right: 5%;
margin: 10px 0;
@media (min-width: $md) { @media (min-width: $md) {
flex: 0 0 50%; flex: 0 0 50%;
margin-right: 10%; margin: 0 10% 0 0;
order: 1;
} }
} }
.category { .category {
flex: 0 0 30%; order: 1;
margin-right: 5%;
@media (min-width: $md) { @media (min-width: $md) {
flex: 0 0 28%; flex: 0 0 28%;
margin-right: 2%; margin-right: 2%;
order: 2;
} }
} }
.posts { .posts {
flex: 0 0 10%; order: 3;
text-align: center;
@media (max-width: $md) { display: flex;
transform: translate(-6px, 0); flex-direction: row;
justify-content: center;
align-items: center;
font-size: .8rem;
small {
margin-right: 3px;
margin-bottom: 0;
font-weight: normal;
font-size: .8rem;
color: $color-black;
}
@media (min-width: $md) {
text-align: center;
flex-direction: column;
small {
margin-right: 0px;
margin-bottom: 5px;
font-weight: bold;
font-size: 1rem;
}
} }
} }
} }
@@ -295,10 +321,14 @@
color: #4f5f63; color: #4f5f63;
text-transform: uppercase; text-transform: uppercase;
font-weight: 700; font-weight: 700;
letter-spacing: .2px;
display: block; display: block;
margin-bottom: .5rem; margin-bottom: .5rem;
text-align: left; text-align: left;
line-height: 1.2;
@media (min-width: $md) {
letter-spacing: .2px;
}
} }
.options { .options {
@@ -352,7 +382,6 @@
span { span {
position: relative; position: relative;
flex: 1 1 auto; flex: 1 1 auto;
margin-right: 20px;
display: flex; display: flex;
justify-content: center; justify-content: center;
@@ -373,6 +402,8 @@
transition: color 150ms ease; transition: color 150ms ease;
font-size: .7rem; font-size: .7rem;
text-align: center;
@media(min-width: $md) { @media(min-width: $md) {
font-size: .9rem; font-size: .9rem;
} }
+276 -162
View File
@@ -1,39 +1,31 @@
.download { .download.latest .dot {
margin-top: 2rem;
}
.download .dot.progress {
.dot.progress {
text-indent: .3rem; text-indent: .3rem;
text-align: center; text-align: center;
line-height: 2.8rem; line-height: 2.8rem;
}
.download .dot.progress .counter {
.counter { font-size: 1.1rem;
font-size: 1.1rem;;
}
}
&.latest {
.dot {
margin-top: 2rem;
}
}
} }
.explain { .explain {
flex-direction: column;
@media (min-width: 768px) {
.changes { flex-direction: row;
small {
line-height: .5rem;
}
} }
} }
.explain .changes small {
line-height: .5rem;
}
.chart { .chart {
@@ -41,171 +33,100 @@
top: -4px; top: -4px;
left: -8px; left: -8px;
z-index: 1; z-index: 1;
.percentage {
display: inline-block;
position: absolute;
top: 9px;
left: 16px;
font-size: 1.1rem;
color: darken($color-our, 30%);
}
canvas {
top: 1px;
position: absolute;
left: 5px;
}
} }
.chart .percentage {
display: inline-block;
position: absolute;
top: 9px;
left: 16px;
font-size: 1.1rem;
color: darken($color-our, 30%);
}
.chart canvas {
top: 1px;
position: absolute;
left: 5px;
}
.get-release { .chart {
position: absolute;
top: -4px;
i { left: -8px;
font-size: 2.5rem; z-index: 1;
line-height: 5rem;
}
} }
.get-release { .get-release {
line-height: 1.5; line-height: 1.5;
padding: 2.5rem 0; padding: 3rem 0;
margin: 2.5rem 0; margin: 0 0 3.5rem ;
border-bottom: 1px solid darken(whitesmoke, 5%); border-bottom: 1px solid darken(whitesmoke, 5%);
border-top: 1px solid darken(whitesmoke, 5%); }
.get-release i {
font-size: 2.5rem;
line-height: 5rem;
}
h3 { .get-release h3 {
font-size: 1.1rem; font-size: 1.1rem;
margin-bottom: .3rem; margin-bottom: .3rem;
color: $color-headline; color: $color-headline;
}
.get-release h3 a {
text-decoration: none;
a { &:hover {
text-decoration: none; color: $color-our;
&:hover {
color: $color-our;
}
}
}
p {
color: $color-headline;
font-size: .95rem;
line-height: 1.3;
margin-bottom: .5rem;
}
small {
font-size: .7rem;
color: $color-text;
} }
} }
.get-release p {
color: $color-headline;
.release { font-size: .95rem;
min-height: 160px; line-height: 1.3;
margin-bottom: .5rem;
&.zip {
i {
color: $color-headline;
}
}
&.bin {
i {
color: rgba(#000, .4);
font-size: 1.6rem;
}
h4 {
font-size: .9rem;
margin-bottom: .3rem;
color: $color-headline;
a {
text-decoration: none;
&:hover {
color: $color-our;
}
}
}
&.col-sm-5 {
padding-top: 18px;
}
}
&.col-sm-1 {
text-align: center;
}
} }
.get-release small {
font-size: .8rem;
.latest { color: rgba($color-text, .6);
.dot.big {
margin-bottom: 30px;
}
.explain {
h4 {
font-size: 2.5rem;
}
p {
font-size: 1.1rem;
color: $color-text
;
}
.col-xs-12 {
min-height: 0;
}
}
} }
.latest .dot.big {
margin-bottom: 30px;
}
.latest .explain h4 {
font-size: 2.5rem;
}
.latest .explain p {
font-size: 1.1rem;
color: $color-text;
}
.latest .explain .col-xs-12 {
min-height: 0;
}
// Single release page // Single release page
.release{ .release {
.markdown-syntax { .markdown-syntax {
p, li, ul {
p, li, ul, a {
color: $color-headline; color: $color-headline;
font-size: .95rem; font-size: .95rem;
} }
@@ -216,7 +137,7 @@
} }
a { a {
text-decoration: underline; text-decoration: underline;
font-family: $font-family; font-family: $font-family;
} }
@@ -253,12 +174,12 @@
} }
} }
} }
.releaseTable { .releaseTable {
.col-xs-3 { .col-xs-3 {
&:first-child { &:first-child {
.progress { .progress {
.top { .top {
@@ -282,6 +203,7 @@
} }
} }
// Progress page // Progress page
.inprogress { .inprogress {
@@ -324,11 +246,12 @@
} }
} }
// Roadmap page // Roadmap page
.plannedreleases { .plannedreleases {
.dot.big { .dot.big {
text-indent: 0; text-indent: 0;
line-height: 3rem; line-height: 3rem;
} }
.chart { .chart {
top: 0px; top: 0px;
@@ -342,3 +265,194 @@
} }
} }
} }
.release-page .explain h2 {
margin: 0;
font-size: 2em;
color: rgba(0,0,0,.8);
}
.release-page .explain small {
margin-bottom: 0;
}
.release-page .dot {
border: none;
}
.release-page .dot.big {
position: relative;
text-indent: 0;
margin: 0;
}
.release-page .chart {
height: 60px;
width: 60px;
top: initial;
left: initial;
text-align: center;
}
.release-page .chart p {
vertical-align: middle;
line-height: 3.7rem;
display: inline-block;
}
.release-page .chart canvas {
top: 0px;
left: 0px;
}
.statuses ul {
list-style-type: none;
}
.statuses ul li {
position: relative;
margin-bottom: 10px;
padding-left: 10px;
}
.statuses li:before {
position: absolute;
top: -4px;
left: -25px;
font-size: 1.5em;
}
.release-progress-indicator {
flex: 1 1 auto;
}
.release-progress-action {
flex: 1 1 auto;
margin-top: 30px;
}
.release-progress-version {
margin-left: 15px;
}
.release-section-group {
flex: 1 1 100%;
padding: 0;
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
@media (min-width: 768px) {
flex: 1 1 47%;
padding: 0 3% 0 0;
align-items: flex-start;
text-align: left;
}
}
.release-section-group:nth-child(even) {
flex: 1 1 100%;
padding: 0;
@media (min-width: 768px) {
flex: 1 1 47%;
padding: 0 0 0 3%;
}
}
.release-section-action {
height: 80px;
display: flex;
justify-content: flex-start;
align-items: center;
box-sizing: border-box;
}
.release-section code {
overflow: auto;
background-color: #333;
background-clip: padding-box;
color: #fff;
font-size: 12px;
line-height: 1.4em;
text-align: center;
text-decoration: none;
padding: 14px 16px 14px 16px;
width: auto;
border-radius: 5px;
border: none;
}
.release-section code a {
text-decoration: none;
}
.release-section + .release-section {
margin-top: 30px;
}
.release-section-group + .release-section-group {
margin-top: 30px;
@media (min-width: 768px) {
margin-top: 0;
}
}
.release-page h2 {
font-size: 1.4rem;
font-weight: bold;
margin-bottom: 0;
}
.release-page h3 {
font-size: 1.1rem;
font-weight: bold;
margin-bottom: 0;
}
// Other files
.release-other-files {
margin-top: 3rem;
}
.release-other-files h3 {
font-size: 1.1rem;
margin-bottom: 5px;
}
.release-other-files small {
font-size: .8rem;
color: rgba($color-text, .5);
}
.release-other-files .release {
min-height: auto;
margin-bottom: 30px;
}
.release-other-files .release a {
display: inline-block;
margin-bottom: 10px;
margin-top: 10px;
}
.release-other-files .release p {
margin-top: 0;
}
@@ -45,6 +45,7 @@ section.forum {
.forum-thread { .forum-thread {
flex: 0 0 100%; flex: 0 0 100%;
display: flex; display: flex;
overflow: hidden;
@media (min-width: $md) { @media (min-width: $md) {
flex: 1 0 49%; flex: 1 0 49%;
@@ -77,6 +78,8 @@ section.forum {
flex-direction: column; flex-direction: column;
flex: 1 0 75%; flex: 1 0 75%;
overflow: hidden;
padding: 0 10px 0 0; padding: 0 10px 0 0;
@media (min-width: $md) { @media (min-width: $md) {
@@ -89,6 +92,7 @@ section.forum {
.category { .category {
margin: .5rem 0 0; margin: .5rem 0 0;
max-width: 95%;
span { span {
font-size: .75rem; font-size: .75rem;
@@ -132,14 +136,14 @@ section.forum {
padding: 25px; padding: 25px;
margin-bottom: 30px; margin-bottom: 30px;
border: 1px solid darken(#f6f6f6, 5%); border: 1px solid darken(#f6f6f6, 5%);
transition: box-shadow .2s; transition: box-shadow .2s ease, border-color .2s ease;
text-decoration: none; text-decoration: none;
display: flex; display: flex;
align-items: center; align-items: center;
&:hover { &:hover {
border-color: transparent; border-color: white;
@include box_shadow(2); @include box_shadow(2);
} }
@@ -182,7 +186,6 @@ section.forum {
color: #000; color: #000;
line-height: 1.3; line-height: 1.3;
font-size: 1rem; font-size: 1rem;
word-break: break-all;
@media (min-width: $md) { @media (min-width: $md) {
font-size: 1.1rem; font-size: 1.1rem;
+5
View File
@@ -15,6 +15,11 @@
@import 'playground'; @import 'playground';
/**
/* Utilities
**/
@import 'utilities/flexbox';
/** /**
/* Elements /* Elements
**/ **/
@@ -0,0 +1,67 @@
/*
Flexbox
*/
.flex { display: flex; }
.flex-inline { display: inline-flex; }
.flex-column { flex-direction: column; }
.flex-wrap { flex-wrap: wrap; }
.items-start { align-items: flex-start; }
.items-end { align-items: flex-end; }
.items-center { align-items: center; }
.items-baseline { align-items: baseline; }
.items-stretch { align-items: stretch; }
.self-start { align-self: flex-start; }
.self-end { align-self: flex-end; }
.self-center { align-self: center; }
.self-baseline { align-self: baseline; }
.self-stretch { align-self: stretch; }
.justify-start { justify-content: flex-start; }
.justify-end { justify-content: flex-end; }
.justify-center { justify-content: center; }
.justify-between { justify-content: space-between; }
.justify-around { justify-content: space-around; }
.content-start { align-content: flex-start; }
.content-end { align-content: flex-end; }
.content-center { align-content: center; }
.content-between { align-content: space-between; }
.content-around { align-content: space-around; }
.content-stretch { align-content: stretch; }
.flx-i {
flex: 1;
}
.flx-g0 {
flex-grow: 0;
}
.flx-s0 {
flex-shrink: 0;
}
.flx-b0 {
flex-basis: 0%;
}
.flx-g1 {
flex-grow: 1;
}
.flx-s1 {
flex-shrink: 1;
}
.flx-b1 {
flex-basis: 100%;
}
/* 1. Fix for Chrome 44 bug. https://code.google.com/p/chromium/issues/detail?id=506893 */
.flex-auto {
flex: 1 1 auto;
min-width: 0; /* 1 */
min-height: 0; /* 1 */
}
.flex-none { flex: none; }
@@ -1,31 +1,31 @@
function modelsBuilderController($scope, umbRequestHelper, $log, $http, modelsBuilderResource) { function modelsBuilderController($scope, umbRequestHelper, $log, $http, modelsBuilderResource) {
$scope.generate = function() { $scope.generate = function() {
$scope.generating = true; $scope.generating = true;
umbRequestHelper.resourcePromise( umbRequestHelper.resourcePromise(
$http.post(umbRequestHelper.getApiUrl("modelsBuilderBaseUrl", "BuildModels")), $http.post(umbRequestHelper.getApiUrl("modelsBuilderBaseUrl", "BuildModels")),
'Failed to generate.') 'Failed to generate.')
.then(function (result) { .then(function (result) {
$scope.generating = false; $scope.generating = false;
$scope.dashboard = result; $scope.dashboard = result;
}); });
}; };
$scope.reload = function () { $scope.reload = function () {
$scope.ready = false; $scope.ready = false;
modelsBuilderResource.getDashboard().then(function (result) { modelsBuilderResource.getDashboard().then(function (result) {
$scope.dashboard = result; $scope.dashboard = result;
$scope.ready = true; $scope.ready = true;
}); });
}; };
function init() { function init() {
modelsBuilderResource.getDashboard().then(function(result) { modelsBuilderResource.getDashboard().then(function(result) {
$scope.dashboard = result; $scope.dashboard = result;
$scope.ready = true; $scope.ready = true;
}); });
} }
init(); init();
} }
angular.module("umbraco").controller("Umbraco.Dashboard.ModelsBuilderController", modelsBuilderController); angular.module("umbraco").controller("Umbraco.Dashboard.ModelsBuilderController", modelsBuilderController);
@@ -1,41 +1,41 @@
<div id="modelsBuilder" ng-controller="Umbraco.Dashboard.ModelsBuilderController"> <div id="modelsBuilder" ng-controller="Umbraco.Dashboard.ModelsBuilderController">
<div ng-show="ready" style="float: right;"> <div ng-show="ready" style="float: right;">
<button type="button" class="btn" ng-click="reload()"><span>Reload</span></button> <button type="button" class="btn" ng-click="reload()"><span>Reload</span></button>
</div> </div>
<h3>Models Builder</h3> <h3>Models Builder</h3>
<div ng-show="!ready"> <div ng-show="!ready">
Loading... Loading...
</div> </div>
<div ng-show="ready"> <div ng-show="ready">
<div ng-bind-html-unsafe="dashboard.text"></div> <div ng-bind-html-unsafe="dashboard.text"></div>
<div ng-if="dashboard.outOfDateModels"> <div ng-if="dashboard.outOfDateModels">
<p>Models are <strong>out-of-date</strong>. <p>Models are <strong>out-of-date</strong>.
</p> </p>
</div> </div>
<div ng-if="dashboard.canGenerate"> <div ng-if="dashboard.canGenerate">
<div ng-if="dashboard.generateCausesRestart"> <div ng-if="dashboard.generateCausesRestart">
<p style="color: red; font-weight: bold;">Generating models will restart the application.</p> <p style="color: red; font-weight: bold;">Generating models will restart the application.</p>
</div> </div>
<div ng-show="!generating"> <div ng-show="!generating">
<button type="button" ng-click="generate()" class="btn btn-danger"> <button type="button" ng-click="generate()" class="btn btn-danger">
<span>Generate models</span> <span>Generate models</span>
</button> </button>
</div> </div>
<div class="umb-loader-wrapper" ng-show="generating"> <div class="umb-loader-wrapper" ng-show="generating">
<div class="umb-loader"></div> <div class="umb-loader"></div>
</div> </div>
</div> </div>
<div ng-if="dashboard.lastError" style="margin-top: 32px;" ng-show="!generating"> <div ng-if="dashboard.lastError" style="margin-top: 32px;" ng-show="!generating">
<span style="color: red; font-weight: bold;">Last generation failed with the following error:</span> <span style="color: red; font-weight: bold;">Last generation failed with the following error:</span>
<pre style="width: 80%; white-space: pre-line; background: #f8f8f8; padding: 4px; font-size: small;">{{dashboard.lastError}}</pre> <pre style="width: 80%; white-space: pre-line; background: #f8f8f8; padding: 4px; font-size: small;">{{dashboard.lastError}}</pre>
</div> </div>
</div> </div>
</div> </div>
@@ -1,23 +1,23 @@
function modelsBuilderResource($q, $http, umbRequestHelper) { function modelsBuilderResource($q, $http, umbRequestHelper) {
return { return {
getModelsOutOfDateStatus: function () { getModelsOutOfDateStatus: function () {
return umbRequestHelper.resourcePromise( return umbRequestHelper.resourcePromise(
$http.get(umbRequestHelper.getApiUrl("modelsBuilderBaseUrl", "GetModelsOutOfDateStatus")), $http.get(umbRequestHelper.getApiUrl("modelsBuilderBaseUrl", "GetModelsOutOfDateStatus")),
"Failed to get models out-of-date status"); "Failed to get models out-of-date status");
}, },
buildModels: function () { buildModels: function () {
return umbRequestHelper.resourcePromise( return umbRequestHelper.resourcePromise(
$http.post(umbRequestHelper.getApiUrl("modelsBuilderBaseUrl", "BuildModels")), $http.post(umbRequestHelper.getApiUrl("modelsBuilderBaseUrl", "BuildModels")),
"Failed to build models"); "Failed to build models");
}, },
getDashboard: function () { getDashboard: function () {
return umbRequestHelper.resourcePromise( return umbRequestHelper.resourcePromise(
$http.get(umbRequestHelper.getApiUrl("modelsBuilderBaseUrl", "GetDashboard")), $http.get(umbRequestHelper.getApiUrl("modelsBuilderBaseUrl", "GetDashboard")),
"Failed to get dashboard"); "Failed to get dashboard");
} }
}; };
} }
angular.module("umbraco.resources").factory("modelsBuilderResource", modelsBuilderResource); angular.module("umbraco.resources").factory("modelsBuilderResource", modelsBuilderResource);
@@ -1,7 +1,7 @@
{ {
//array of files we want to inject into the application on app_start //array of files we want to inject into the application on app_start
javascript: [ javascript: [
'~/App_Plugins/ModelsBuilder/modelsbuilder.controller.js', '~/App_Plugins/ModelsBuilder/modelsbuilder.controller.js',
'~/App_Plugins/ModelsBuilder/modelsbuilder.resource.js' '~/App_Plugins/ModelsBuilder/modelsbuilder.resource.js'
] ]
} }
+1 -1
View File
@@ -1,2 +1,2 @@
<%@ Application Inherits="Umbraco.Web.UmbracoApplication" Language="C#" %> <%@ Application Inherits="Umbraco.Web.UmbracoApplication" Language="C#" %>
+54 -53
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\UmbracoCms.7.5.3\build\UmbracoCms.props" Condition="Exists('..\packages\UmbracoCms.7.5.3\build\UmbracoCms.props')" /> <Import Project="..\packages\UmbracoCms.7.5.5\build\UmbracoCms.props" Condition="Exists('..\packages\UmbracoCms.7.5.5\build\UmbracoCms.props')" />
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup> <PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
@@ -47,32 +47,32 @@
<Prefer32Bit>false</Prefer32Bit> <Prefer32Bit>false</Prefer32Bit>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="AutoMapper, Version=3.0.0.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="AutoMapper, Version=3.3.1.0, Culture=neutral, PublicKeyToken=be96cd2c38ef1005, processorArchitecture=MSIL">
<HintPath>..\packages\AutoMapper.3.0.0\lib\net40\AutoMapper.dll</HintPath> <HintPath>..\packages\AutoMapper.3.3.1\lib\net40\AutoMapper.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="AutoMapper.Net4, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="AutoMapper.Net4, Version=3.3.1.0, Culture=neutral, PublicKeyToken=be96cd2c38ef1005, processorArchitecture=MSIL">
<HintPath>..\packages\AutoMapper.3.0.0\lib\net40\AutoMapper.Net4.dll</HintPath> <HintPath>..\packages\AutoMapper.3.3.1\lib\net40\AutoMapper.Net4.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="businesslogic, Version=1.0.6092.24022, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="businesslogic, Version=1.0.6183.23126, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\businesslogic.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.5\lib\businesslogic.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="ClientDependency.Core, Version=1.9.1.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="ClientDependency.Core, Version=1.9.2.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\ClientDependency.1.9.1\lib\net45\ClientDependency.Core.dll</HintPath> <HintPath>..\packages\ClientDependency.1.9.2\lib\net45\ClientDependency.Core.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="ClientDependency.Core.Mvc, Version=1.8.0.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="ClientDependency.Core.Mvc, Version=1.8.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\ClientDependency-Mvc5.1.8.0.0\lib\net45\ClientDependency.Core.Mvc.dll</HintPath> <HintPath>..\packages\ClientDependency-Mvc5.1.8.0.0\lib\net45\ClientDependency.Core.Mvc.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="cms, Version=1.0.6092.24022, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="cms, Version=1.0.6183.23126, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\cms.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.5\lib\cms.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="controls, Version=1.0.6092.24024, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="controls, Version=1.0.6183.23128, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\controls.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.5\lib\controls.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="CookComputing.XmlRpcV2, Version=2.5.0.0, Culture=neutral, PublicKeyToken=a7d6e17aa302004d, processorArchitecture=MSIL"> <Reference Include="CookComputing.XmlRpcV2, Version=2.5.0.0, Culture=neutral, PublicKeyToken=a7d6e17aa302004d, processorArchitecture=MSIL">
@@ -83,32 +83,32 @@
<HintPath>..\packages\EasyHttp.1.6.29.0\lib\net40\EasyHttp.dll</HintPath> <HintPath>..\packages\EasyHttp.1.6.29.0\lib\net40\EasyHttp.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Examine, Version=0.1.69.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="Examine, Version=0.1.70.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Examine.0.1.69.0\lib\Examine.dll</HintPath> <HintPath>..\packages\Examine.0.1.70.0\lib\Examine.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="HtmlAgilityPack, Version=1.4.9.0, Culture=neutral, PublicKeyToken=bd319b19eaf3b43a, processorArchitecture=MSIL"> <Reference Include="HtmlAgilityPack, Version=1.4.9.5, Culture=neutral, PublicKeyToken=bd319b19eaf3b43a, processorArchitecture=MSIL">
<HintPath>..\packages\HtmlAgilityPack.1.4.9\lib\Net45\HtmlAgilityPack.dll</HintPath> <HintPath>..\packages\HtmlAgilityPack.1.4.9.5\lib\Net45\HtmlAgilityPack.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="ICSharpCode.SharpZipLib, Version=0.86.0.518, Culture=neutral, PublicKeyToken=1b03e6acf1164f73, processorArchitecture=MSIL"> <Reference Include="ICSharpCode.SharpZipLib, Version=0.86.0.518, Culture=neutral, PublicKeyToken=1b03e6acf1164f73, processorArchitecture=MSIL">
<HintPath>..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll</HintPath> <HintPath>..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="ImageProcessor, Version=2.4.4.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="ImageProcessor, Version=2.4.5.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\ImageProcessor.2.4.4.0\lib\net45\ImageProcessor.dll</HintPath> <HintPath>..\packages\ImageProcessor.2.4.5.0\lib\net45\ImageProcessor.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="ImageProcessor.Web, Version=4.6.4.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="ImageProcessor.Web, Version=4.6.6.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\ImageProcessor.Web.4.6.4.0\lib\net45\ImageProcessor.Web.dll</HintPath> <HintPath>..\packages\ImageProcessor.Web.4.6.6.0\lib\net45\ImageProcessor.Web.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="InfoCaster.Umbraco.UrlTracker, Version=3.11.5900.30099, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="InfoCaster.Umbraco.UrlTracker, Version=3.11.5900.30099, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UrlTracker.3.11\lib\InfoCaster.Umbraco.UrlTracker.dll</HintPath> <HintPath>..\packages\UrlTracker.3.11\lib\InfoCaster.Umbraco.UrlTracker.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="interfaces, Version=1.0.6092.24017, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="interfaces, Version=1.0.6183.23122, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\interfaces.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.5\lib\interfaces.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="JsonFx, Version=2.0.1209.2802, Culture=neutral, PublicKeyToken=315052dd637f8a52, processorArchitecture=MSIL"> <Reference Include="JsonFx, Version=2.0.1209.2802, Culture=neutral, PublicKeyToken=315052dd637f8a52, processorArchitecture=MSIL">
@@ -116,7 +116,7 @@
<HintPath>..\packages\JsonFx.2.0.1209.2802\lib\net40\JsonFx.dll</HintPath> <HintPath>..\packages\JsonFx.2.0.1209.2802\lib\net40\JsonFx.dll</HintPath>
</Reference> </Reference>
<Reference Include="log4net, Version=1.2.11.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="log4net, Version=1.2.11.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\log4net.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.5\lib\log4net.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Lucene.Net, Version=2.9.4.1, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL"> <Reference Include="Lucene.Net, Version=2.9.4.1, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
@@ -128,7 +128,7 @@
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Microsoft.ApplicationBlocks.Data, Version=1.0.1559.20655, Culture=neutral"> <Reference Include="Microsoft.ApplicationBlocks.Data, Version=1.0.1559.20655, Culture=neutral">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\Microsoft.ApplicationBlocks.Data.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.5\lib\Microsoft.ApplicationBlocks.Data.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Microsoft.AspNet.Identity.Core, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <Reference Include="Microsoft.AspNet.Identity.Core, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
@@ -204,8 +204,8 @@
<HintPath>..\packages\semver.1.1.2\lib\net451\Semver.dll</HintPath> <HintPath>..\packages\semver.1.1.2\lib\net451\Semver.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="SQLCE4Umbraco, Version=1.0.6092.24023, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="SQLCE4Umbraco, Version=1.0.6183.23127, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\SQLCE4Umbraco.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.5\lib\SQLCE4Umbraco.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="System.Collections.Immutable, Version=1.1.36.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> <Reference Include="System.Collections.Immutable, Version=1.1.36.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
@@ -214,11 +214,11 @@
</Reference> </Reference>
<Reference Include="System.Data.DataSetExtensions" /> <Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Data.SqlServerCe, Version=4.0.0.1, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL"> <Reference Include="System.Data.SqlServerCe, Version=4.0.0.1, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\System.Data.SqlServerCe.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.5\lib\System.Data.SqlServerCe.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="System.Data.SqlServerCe.Entity, Version=4.0.0.1, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL"> <Reference Include="System.Data.SqlServerCe.Entity, Version=4.0.0.1, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\System.Data.SqlServerCe.Entity.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.5\lib\System.Data.SqlServerCe.Entity.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="System.Net.Http" /> <Reference Include="System.Net.Http" />
@@ -282,47 +282,47 @@
<Reference Include="System.EnterpriseServices" /> <Reference Include="System.EnterpriseServices" />
<Reference Include="System.Xml.Linq" /> <Reference Include="System.Xml.Linq" />
<Reference Include="TidyNet, Version=1.0.0.0, Culture=neutral"> <Reference Include="TidyNet, Version=1.0.0.0, Culture=neutral">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\TidyNet.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.5\lib\TidyNet.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="umbraco, Version=1.0.6092.24026, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="umbraco, Version=1.0.6183.23129, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\umbraco.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.5\lib\umbraco.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Umbraco.Core, Version=1.0.6092.24019, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="Umbraco.Core, Version=1.0.6183.23123, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\Umbraco.Core.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.5\lib\Umbraco.Core.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="umbraco.DataLayer, Version=1.0.6092.24022, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="umbraco.DataLayer, Version=1.0.6183.23126, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\umbraco.DataLayer.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.5\lib\umbraco.DataLayer.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="umbraco.editorControls, Version=1.0.6092.24028, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="umbraco.editorControls, Version=1.0.6183.23131, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\umbraco.editorControls.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.5\lib\umbraco.editorControls.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Umbraco.IdentityExtensions, Version=1.0.5779.34109, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="Umbraco.IdentityExtensions, Version=1.0.5779.34109, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.IdentityExtensions.1.0.0\lib\net45\Umbraco.IdentityExtensions.dll</HintPath> <HintPath>..\packages\UmbracoCms.IdentityExtensions.1.0.0\lib\net45\Umbraco.IdentityExtensions.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="umbraco.MacroEngines, Version=1.0.6092.24028, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="umbraco.MacroEngines, Version=1.0.6183.23132, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\umbraco.MacroEngines.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.5\lib\umbraco.MacroEngines.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Umbraco.ModelsBuilder, Version=3.0.4.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="Umbraco.ModelsBuilder, Version=3.0.5.96, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Umbraco.ModelsBuilder.3.0.4\lib\Umbraco.ModelsBuilder.dll</HintPath> <HintPath>..\packages\Umbraco.ModelsBuilder.3.0.5\lib\Umbraco.ModelsBuilder.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="umbraco.providers, Version=1.0.6092.24024, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="umbraco.providers, Version=1.0.6183.23128, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\umbraco.providers.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.5\lib\umbraco.providers.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Umbraco.Web.UI, Version=1.0.6092.24029, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="Umbraco.Web.UI, Version=1.0.6183.23133, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\Umbraco.Web.UI.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.5\lib\Umbraco.Web.UI.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="UmbracoExamine, Version=0.7.0.24023, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="UmbracoExamine, Version=0.7.0.23127, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\UmbracoExamine.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.5\lib\UmbracoExamine.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="UrlRewritingNet.UrlRewriter, Version=2.0.7.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="UrlRewritingNet.UrlRewriter, Version=2.0.7.0, Culture=neutral, processorArchitecture=MSIL">
@@ -1707,7 +1707,6 @@
<Content Include="Views\MacroPartials\Navigation\TopNavigation.cshtml" /> <Content Include="Views\MacroPartials\Navigation\TopNavigation.cshtml" />
<Content Include="masterpages\ForumMaster.master" /> <Content Include="masterpages\ForumMaster.master" />
<Content Include="masterpages\DocumentationMaster.master" /> <Content Include="masterpages\DocumentationMaster.master" />
<Content Include="masterpages\AddMarkdownProp.master" />
<Content Include="masterpages\ComRepositoryFrontpage.master" /> <Content Include="masterpages\ComRepositoryFrontpage.master" />
<Content Include="Assets\css\fonts\icomoon\icomoon.eot" /> <Content Include="Assets\css\fonts\icomoon\icomoon.eot" />
<Content Include="Assets\css\fonts\icomoon\icomoon.ttf" /> <Content Include="Assets\css\fonts\icomoon\icomoon.ttf" />
@@ -4282,7 +4281,6 @@
<Content Include="masterpages\ManageSpam.master" /> <Content Include="masterpages\ManageSpam.master" />
<Content Include="macroScripts\ManageSpam.cshtml" /> <Content Include="macroScripts\ManageSpam.cshtml" />
<Content Include="masterpages\ProjectsVersioned.master" /> <Content Include="masterpages\ProjectsVersioned.master" />
<Content Include="macroScripts\ProjectsVersioned.cshtml" />
<Content Include="macroScripts\ProjectsVersionList.cshtml" /> <Content Include="macroScripts\ProjectsVersionList.cshtml" />
<Content Include="masterpages\ProjectCompatibility.master" /> <Content Include="masterpages\ProjectCompatibility.master" />
<Content Include="macroScripts\EditProjectCompatibility.cshtml" /> <Content Include="macroScripts\EditProjectCompatibility.cshtml" />
@@ -4409,7 +4407,9 @@
<Content Include="Views\Partials\Grid\Editors\Embed.cshtml" /> <Content Include="Views\Partials\Grid\Editors\Embed.cshtml" />
<Content Include="Views\Partials\Grid\Editors\Base.cshtml" /> <Content Include="Views\Partials\Grid\Editors\Base.cshtml" />
<Content Include="Views\Partials\Grid\Bootstrap3.cshtml" /> <Content Include="Views\Partials\Grid\Bootstrap3.cshtml" />
<Content Include="Views\Partials\Grid\Bootstrap3-Fluid.cshtml" />
<Content Include="Views\Partials\Grid\Bootstrap2.cshtml" /> <Content Include="Views\Partials\Grid\Bootstrap2.cshtml" />
<Content Include="Views\Partials\Grid\Bootstrap2-Fluid.cshtml" />
<None Include="web.Debug.config"> <None Include="web.Debug.config">
<DependentUpon>web.config</DependentUpon> <DependentUpon>web.config</DependentUpon>
</None> </None>
@@ -4482,14 +4482,15 @@
<!-- Only runs if the ClientFiles build folder doesn't yet exist --> <!-- Only runs if the ClientFiles build folder doesn't yet exist -->
<CallTarget Targets="ClientFilesBuild" Condition="!Exists('$(ProjectDir)\..\OurUmbraco.Client\build\assets')" /> <CallTarget Targets="ClientFilesBuild" Condition="!Exists('$(ProjectDir)\..\OurUmbraco.Client\build\assets')" />
</Target> </Target>
<Import Project="..\packages\AutoMapper.3.3.1\tools\AutoMapper.targets" Condition="Exists('..\packages\AutoMapper.3.3.1\tools\AutoMapper.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup> <PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup> </PropertyGroup>
<Error Condition="!Exists('..\packages\UmbracoCms.7.5.3\build\UmbracoCms.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\UmbracoCms.7.5.3\build\UmbracoCms.props'))" /> <Error Condition="!Exists('..\packages\UmbracoCms.7.5.5\build\UmbracoCms.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\UmbracoCms.7.5.5\build\UmbracoCms.props'))" />
<Error Condition="!Exists('..\packages\UmbracoCms.7.5.3\build\UmbracoCms.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\UmbracoCms.7.5.3\build\UmbracoCms.targets'))" /> <Error Condition="!Exists('..\packages\UmbracoCms.7.5.5\build\UmbracoCms.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\UmbracoCms.7.5.5\build\UmbracoCms.targets'))" />
</Target> </Target>
<Import Project="..\packages\UmbracoCms.7.5.3\build\UmbracoCms.targets" Condition="Exists('..\packages\UmbracoCms.7.5.3\build\UmbracoCms.targets')" /> <Import Project="..\packages\UmbracoCms.7.5.5\build\UmbracoCms.targets" Condition="Exists('..\packages\UmbracoCms.7.5.5\build\UmbracoCms.targets')" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets. Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="AfterBuild"> <Target Name="AfterBuild">
@@ -4,7 +4,7 @@
if (string.IsNullOrWhiteSpace(memberGuid) == false) if (string.IsNullOrWhiteSpace(memberGuid) == false)
{ {
var memberService = UmbracoContext.Current.Application.Services.MemberService; var memberService = ApplicationContext.Current.Services.MemberService;
var member = memberService.GetByKey(new Guid(memberGuid)); var member = memberService.GetByKey(new Guid(memberGuid));
if (member == null) if (member == null)
@@ -10,5 +10,5 @@
<h4><a href="?category=@childPage.Name">@childPage.Name</a></h4> <h4><a href="?category=@childPage.Name">@childPage.Name</a></h4>
</li> </li>
} }
<li><h4><a href="?category=uaas">Umbraco as a Service</a></h4></li> <li><h4><a href="?category=uaas">Umbraco Cloud</a></h4></li>
</ul> </ul>
@@ -22,7 +22,7 @@
} }
if (category != null) if (category != null)
{ {
headline = category == "uaas" ? "Umbraco as a Service" : category.ToLowerInvariant(); headline = category == "uaas" ? "Umbraco Cloud" : category.ToLowerInvariant();
} }
var searchFilters = new SearchFilters(BooleanOperation.And); var searchFilters = new SearchFilters(BooleanOperation.And);
@@ -0,0 +1,92 @@
@inherits UmbracoViewPage<dynamic>
@using Umbraco.Web.Templates
@using Newtonsoft.Json.Linq
@*
Razor helpers located at the bottom of this file
*@
@if (Model != null && Model.sections != null)
{
var oneColumn = ((System.Collections.ICollection)Model.sections).Count == 1;
<div class="umb-grid">
@if (oneColumn)
{
foreach (var section in Model.sections) {
<div class="grid-section">
@foreach (var row in section.rows) {
@renderRow(row, true);
}
</div>
}
}else {
<div class="container-fluid">
<div class="row-fluid clearfix">
@foreach (var s in Model.sections) {
<div class="grid-section">
<div class="@("span" + s.grid) column">
@foreach (var row in s.rows) {
@renderRow(row, false);
}
</div>
</div>
}
</div>
</div>
}
</div>
}
@helper renderRow(dynamic row, bool singleColumn){
<div @RenderElementAttributes(row)>
@Umbraco.If(singleColumn, "<div class='container-fluid'>")
<div class="row-fluid clearfix">
@foreach ( var area in row.areas ) {
<div class="@("span" + area.grid) column">
<div @RenderElementAttributes(area)>
@foreach (var control in area.controls) {
if (control !=null && control.editor != null && control.editor.view != null ) {
<text>@Html.Partial("grid/editors/base", (object)control)</text>
}
}
</div>
</div>}
</div>
@Umbraco.If(singleColumn, "</div>")
</div>
}
@functions {
public static MvcHtmlString RenderElementAttributes(dynamic contentItem)
{
var attrs = new List<string>();
JObject cfg = contentItem.config;
if(cfg != null)
foreach (JProperty property in cfg.Properties())
{
var propertyValue = TemplateUtilities.CleanForXss(property.Value.ToString());
attrs.Add(property.Name + "=\"" + propertyValue + "\"");
}
JObject style = contentItem.styles;
if (style != null) {
var cssVals = new List<string>();
foreach (JProperty property in style.Properties())
{
var propertyValue = TemplateUtilities.CleanForXss(property.Value.ToString());
if (string.IsNullOrWhiteSpace(propertyValue) == false)
{
cssVals.Add(property.Name + ":" + propertyValue + ";");
}
}
if (cssVals.Any())
attrs.Add("style='" + string.Join(" ", cssVals) + "'");
}
return new MvcHtmlString(string.Join(" ", attrs));
}
}
@@ -64,21 +64,29 @@
JObject cfg = contentItem.config; JObject cfg = contentItem.config;
if(cfg != null) if(cfg != null)
foreach (JProperty property in cfg.Properties()) { foreach (JProperty property in cfg.Properties())
attrs.Add(property.Name + "=\"" + property.Value.ToString() + "\""); {
var propertyValue = TemplateUtilities.CleanForXss(property.Value.ToString());
attrs.Add(property.Name + "=\"" + propertyValue + "\"");
} }
JObject style = contentItem.styles; JObject style = contentItem.styles;
if (style != null) { if (style != null) {
var cssVals = new List<string>(); var cssVals = new List<string>();
foreach (JProperty property in style.Properties()) foreach (JProperty property in style.Properties())
cssVals.Add(property.Name + ":" + property.Value.ToString() + ";"); {
var propertyValue = TemplateUtilities.CleanForXss(property.Value.ToString());
if (string.IsNullOrWhiteSpace(propertyValue) == false)
{
cssVals.Add(property.Name + ":" + propertyValue + ";");
}
}
if (cssVals.Any()) if (cssVals.Any())
attrs.Add("style=\"" + string.Join(" ", cssVals) + "\""); attrs.Add("style=\"" + string.Join(" ", cssVals) + "\"");
} }
return new MvcHtmlString(string.Join(" ", attrs)); return new MvcHtmlString(string.Join(" ", attrs));
} }
} }
@@ -0,0 +1,88 @@
@inherits UmbracoViewPage<dynamic>
@using Umbraco.Web.Templates
@using Newtonsoft.Json.Linq
@*
Razor helpers located at the bottom of this file
*@
@if (Model != null && Model.sections != null)
{
var oneColumn = ((System.Collections.ICollection)Model.sections).Count == 1;
<div class="umb-grid">
@if (oneColumn)
{
foreach (var section in Model.sections) {
<div class="grid-section">
@foreach (var row in section.rows) {
@renderRow(row);
}
</div>
}
}else {
<div class="row clearfix">
@foreach (var s in Model.sections) {
<div class="grid-section">
<div class="col-md-@s.grid column">
@foreach (var row in s.rows) {
@renderRow(row);
}
</div>
</div>
}
</div>
}
</div>
}
@helper renderRow(dynamic row){
<div @RenderElementAttributes(row)>
<div class="row clearfix">
@foreach ( var area in row.areas ) {
<div class="col-md-@area.grid column">
<div @RenderElementAttributes(area)>
@foreach (var control in area.controls) {
if (control !=null && control.editor != null && control.editor.view != null ) {
<text>@Html.Partial("grid/editors/base", (object)control)</text>
}
}
</div>
</div>}
</div>
</div>
}
@functions {
public static MvcHtmlString RenderElementAttributes(dynamic contentItem)
{
var attrs = new List<string>();
JObject cfg = contentItem.config;
if(cfg != null)
foreach (JProperty property in cfg.Properties())
{
var propertyValue = TemplateUtilities.CleanForXss(property.Value.ToString());
attrs.Add(property.Name + "=\"" + propertyValue + "\"");
}
JObject style = contentItem.styles;
if (style != null) {
var cssVals = new List<string>();
foreach (JProperty property in style.Properties())
{
var propertyValue = TemplateUtilities.CleanForXss(property.Value.ToString());
if (string.IsNullOrWhiteSpace(propertyValue) == false)
{
cssVals.Add(property.Name + ":" + propertyValue + ";");
}
}
if (cssVals.Any())
attrs.Add("style='" + string.Join(" ", cssVals) + "'");
}
return new MvcHtmlString(string.Join(" ", attrs));
}
}
@@ -64,21 +64,29 @@
JObject cfg = contentItem.config; JObject cfg = contentItem.config;
if(cfg != null) if(cfg != null)
foreach (JProperty property in cfg.Properties()) { foreach (JProperty property in cfg.Properties())
attrs.Add(property.Name + "=\"" + property.Value.ToString() + "\""); {
var propertyValue = TemplateUtilities.CleanForXss(property.Value.ToString());
attrs.Add(property.Name + "=\"" + propertyValue + "\"");
} }
JObject style = contentItem.styles; JObject style = contentItem.styles;
if (style != null) { if (style != null) {
var cssVals = new List<string>(); var cssVals = new List<string>();
foreach (JProperty property in style.Properties()) foreach (JProperty property in style.Properties())
cssVals.Add(property.Name + ":" + property.Value.ToString() + ";"); {
var propertyValue = TemplateUtilities.CleanForXss(property.Value.ToString());
if (string.IsNullOrWhiteSpace(propertyValue) == false)
{
cssVals.Add(property.Name + ":" + propertyValue + ";");
}
}
if (cssVals.Any()) if (cssVals.Any())
attrs.Add("style=\"" + string.Join(" ", cssVals) + "\""); attrs.Add("style=\"" + string.Join(" ", cssVals) + "\"");
} }
return new MvcHtmlString(string.Join(" ", attrs)); return new MvcHtmlString(string.Join(" ", attrs));
} }
} }
@@ -1,5 +1,4 @@
@model dynamic @model dynamic
@using Umbraco.Web.Templates
@functions { @functions {
public static string EditorView(dynamic contentItem) public static string EditorView(dynamic contentItem)
@@ -1,3 +1,2 @@
@model dynamic @model dynamic
@using Umbraco.Web.Templates
@Html.Raw(Model.value) @Html.Raw(Model.value)
@@ -1,6 +1,4 @@
@inherits UmbracoViewPage<dynamic> @inherits UmbracoViewPage<dynamic>
@using Umbraco.Web.Templates
@if (Model.value != null) @if (Model.value != null)
{ {
@@ -1,5 +1,4 @@
@model dynamic @model dynamic
@using Umbraco.Web.Templates
@if (Model.value != null) @if (Model.value != null)
{ {
@@ -4,10 +4,9 @@
@if (Model.editor.config.markup != null) @if (Model.editor.config.markup != null)
{ {
string markup = Model.editor.config.markup.ToString(); string markup = Model.editor.config.markup.ToString();
var UmbracoHelper = new UmbracoHelper(UmbracoContext.Current); var UmbracoHelper = new UmbracoHelper(UmbracoContext.Current);
markup = markup.Replace("#value#", UmbracoHelper.ReplaceLineBreaksForHtml(Model.value.ToString())); markup = markup.Replace("#value#", UmbracoHelper.ReplaceLineBreaksForHtml(TemplateUtilities.CleanForXss(Model.value.ToString())));
markup = markup.Replace("#style#", Model.editor.config.style.ToString()); markup = markup.Replace("#style#", Model.editor.config.style.ToString());
<text> <text>
@@ -66,11 +66,11 @@
<div class="versions"> <div class="versions">
@if (Model.WorksOnUaaS) @if (Model.WorksOnUaaS)
{ {
<span class="smiley joyous">Works on Umbraco as a Service</span> <span class="smiley joyous">Works on Umbraco Cloud</span>
} }
else else
{ {
<span class="smiley untested">Untested or doesn't work on Umbraco as a Service</span> <span class="smiley untested">Untested or doesn't work on Umbraco Cloud</span>
} }
@foreach (var ver in Model.VersionCompatibilities) @foreach (var ver in Model.VersionCompatibilities)
{ {
+3
View File
@@ -8,6 +8,9 @@
</configSections> </configSections>
@@ -10,7 +10,7 @@ NOTES:
* Compression/Combination/Minification is not enabled unless debug="false" is specified on the 'compiliation' element in the web.config * Compression/Combination/Minification is not enabled unless debug="false" is specified on the 'compiliation' element in the web.config
* A new version will invalidate both client and server cache and create new persisted files * A new version will invalidate both client and server cache and create new persisted files
--> -->
<clientDependency version="1272768233" fileDependencyExtensions=".js,.css" loggerType="Umbraco.Web.UI.CdfLogger, umbraco"> <clientDependency version="1837202336" fileDependencyExtensions=".js,.css" loggerType="Umbraco.Web.UI.CdfLogger, umbraco">
<!-- <!--
This section is used for Web Forms only, the enableCompositeFiles="true" is optional and by default is set to true. This section is used for Web Forms only, the enableCompositeFiles="true" is optional and by default is set to true.
+13 -3
View File
@@ -30,7 +30,17 @@
<control showOnce="true" addPanel="true" panelCaption=""> <control showOnce="true" addPanel="true" panelCaption="">
views/dashboard/developer/developerdashboardvideos.html views/dashboard/developer/developerdashboardvideos.html
</control> </control>
</tab> </tab>
<tab caption="Health Check">
<control>
views/dashboard/developer/healthcheck.html
</control>
</tab>
<tab caption="Redirect URL Management">
<control>
views/dashboard/developer/redirecturls.html
</control>
</tab>
<tab caption="Examine Management"> <tab caption="Examine Management">
<control> <control>
views/dashboard/developer/examinemanagement.html views/dashboard/developer/examinemanagement.html
@@ -119,8 +129,8 @@
<area>developer</area> <area>developer</area>
</areas> </areas>
<tab caption="Models Builder"> <tab caption="Models Builder">
<control> <control>
/App_Plugins/ModelsBuilder/modelsbuilder.htm /App_Plugins/ModelsBuilder/modelsbuilder.htm
</control> </control>
</tab> </tab>
</section> </section>
@@ -80,7 +80,28 @@ You get this notification because you posted to our forum.
You can unsubscribe from your profile on our.umbraco.org You can unsubscribe from your profile on our.umbraco.org
</body> </body>
</notification> </notification>
<notification name="MarkAsSolutionReminderSingle"
assembly="NotificationsCore"
type="NotificationsCore.NotificationTypes.MarkAsSolutionReminderSingle">
<subject>Umbraco community: Solution Reminder</subject>
<body>
We noticed that the topic {0} you created in the Umbraco Community Forum does not have a post marked as a solution.
If one of the replies helped answer your question or resolve your issue please mark it as a solution so others can quickly find it.
You can view the topic and replies here: {1}
Thank You from the Umbraco Community!
--------------------------------------------------
You get this notification because you posted to our forum.
You can unsubscribe from your profile on our.umbraco.org
</body>
</notification>
</instant> </instant>
</configuration> </configuration>
@@ -39,7 +39,7 @@
"view": "textstring", "view": "textstring",
"icon": "icon-quote", "icon": "icon-quote",
"config": { "config": {
"style": "border-left: 3px solid #ccc; padding: 10px; color: #ccc; font-family: serif; font-variant: italic; font-size: 18px", "style": "border-left: 3px solid #ccc; padding: 10px; color: #ccc; font-family: serif; font-style: italic; font-size: 18px",
"markup": "<blockquote>#value#</blockquote>" "markup": "<blockquote>#value#</blockquote>"
} }
} }
@@ -1,304 +0,0 @@
@inherits umbraco.MacroEngines.DynamicNodeContext
@using System.Globalization
@using System.Text.RegularExpressions
@using OurUmbraco.MarketPlace.Models
@using OurUmbraco.Our
@using uForum.Businesslogic
@{
var queriedVersion = Request.QueryString["v"];
int requestedVersion;
int.TryParse(queriedVersion, out requestedVersion);
Version properVersion = null;
if (requestedVersion != 0)
{
properVersion = GetProperVersion(requestedVersion.ToString(CultureInfo.InvariantCulture));
}
var projectGroups = Model.Children.Where("nodeTypeAlias == \"ProjectGroup\"");
var projects = new List<UmbracoProject>();
foreach (var projectGroup in projectGroups)
{
foreach (var project in projectGroup.Children)
{
if (project.projectLive)
{
var versionsList = new List<int>();
var compatibleVersions = project.CompatibleVersions.Split(',');
foreach (var compatibleVersion in compatibleVersions)
{
if (string.IsNullOrWhiteSpace(compatibleVersion) == false && compatibleVersion != "saved")
{
int version;
if (int.TryParse(compatibleVersion.Substring(1), out version))
{
versionsList.Add(version);
}
}
}
var umbracoProject = new UmbracoProject
{
Id = project.Id,
Name = project.Name,
CreateDate = project.CreateDate,
CompatibleVersions = versionsList
};
projects.Add(umbracoProject);
}
}
}
if (requestedVersion == 0)
{
<div class="deliPromoBox clearfix">
@{
var vs = new List<int>();
foreach (var project in projects.OrderByDescending(x => x.CreateDate))
{
foreach (var version in project.CompatibleVersions.Where(version => vs.Contains(version) == false))
{
vs.Add(version);
}
}
foreach (var v in vs.OrderBy(x => x).Where(x => x.ToString(CultureInfo.InvariantCulture).StartsWith("3") == false && x.ToString(CultureInfo.InvariantCulture).StartsWith("5") == false).Skip(6))
{
<a href="/Projects/ProjectsVersioned?v=@v">Umbraco @(GetProperVersion(v.ToString(CultureInfo.InvariantCulture)).ToString(2)).x</a><br />
}
}
</div>
}
else
{
<h1 class="deliCatHead">Umbraco @(properVersion.ToString(2)).x compatible projects</h1>
<p><strong>Note:</strong> packages higher up in this list are more likely to actually work as they have been reported <br />to be working with Umbraco version @(properVersion.ToString(2)).x.</p>
<div class="deliPromoBox clearfix">
<div class="deliPromoArea">
<div class="deliPromoBox new clearfix">
@{
var vs = new List<int>();
foreach (var project in projects.OrderByDescending(x => x.CreateDate))
{
foreach (var version in project.CompatibleVersions.Where(version => vs.Contains(version) == false))
{
vs.Add(version);
}
}
}
<ul class="promoOptions">
@foreach (var v in vs.OrderBy(x => x).Where(x => x.ToString(CultureInfo.InvariantCulture).StartsWith("3") == false && x.ToString(CultureInfo.InvariantCulture).StartsWith("5") == false).Skip(6))
{
var itemProperVersion = GetProperVersion(v.ToString(CultureInfo.InvariantCulture)).ToString(2);
var currentProperVersion = properVersion.ToString(2);
<li><a href="?v=@v" class="newnav @(itemProperVersion == currentProperVersion ? "on": null)">@(itemProperVersion).x</a></li>
}
</ul>
@{
var projectIds = projects.Where(x => x.CompatibleVersions.Contains(requestedVersion)).Select(x => x.Id).ToArray();
var selection = string.Join(",", projectIds);
if (string.IsNullOrWhiteSpace(selection) == false)
{
var reader = Data.SqlHelper.ExecuteReader("SELECT id, nodeId, downloads FROM wikiFiles WHERE type = 'package' AND nodeId IN (" + selection + ")");
while (reader.Read())
{
var project = projects.FirstOrDefault(x => x.Id == reader.GetInt("nodeId"));
if (project != null)
{
project.TotalDownloads = project.TotalDownloads + reader.GetInt("downloads");
project.FileId = reader.GetInt("id");
}
}
reader = Data.SqlHelper.ExecuteReader("SELECT id, SUM([points]) AS Karma FROM powersProject WHERE id IN (" + selection + ") GROUP BY Id");
while (reader.Read())
{
var project = projects.FirstOrDefault(x => x.Id == reader.GetInt("id"));
if (project != null)
{
project.Karma = reader.GetInt("Karma");
}
}
var i = 1;
foreach (var project in projects.OrderBy(x => x.TotalDownloads).Where(x => x.CompatibleVersions.Contains(requestedVersion)))
{
project.TotalDownloadsRank = i + 5;
i++;
}
i = 1;
foreach (var project in projects.OrderBy(x => x.DownloadsCurrentVersion).Where(x => x.CompatibleVersions.Contains(requestedVersion)))
{
project.CurrentVersionDownloadsRank = i + 10;
i++;
}
i = 1;
foreach (var project in projects.OrderBy(x => x.Karma).Where(x => x.CompatibleVersions.Contains(requestedVersion)))
{
project.KarmaRank = i + 5;
i++;
}
foreach (var project in projects.Where(x => x.CompatibleVersions.Contains(requestedVersion)))
{
project.TotalRank = project.TotalDownloadsRank + project.CurrentVersionDownloadsRank + project.KarmaRank;
}
var fileIds = projects.Where(x => x.CompatibleVersions.Contains(requestedVersion)).Select(x => x.FileId).ToArray();
selection = string.Join(",", fileIds);
reader = Data.SqlHelper.ExecuteReader("SELECT * FROM DeliVersionCompatibility WHERE fileID IN(" + selection + ") AND version LIKE '" + GetProperVersion(requestedVersion.ToString(CultureInfo.InvariantCulture)).ToString(2) + ".%'");
while (reader.Read())
{
var project = projects.FirstOrDefault(x => x.Id == reader.GetInt("projectId"));
if (project != null)
{
project.ReportsCount++;
if (reader.GetBoolean("isCompatible"))
{
project.CompatibilityCount++;
}
}
}
var totalProjects = projects.Count(x => x.CompatibleVersions.Contains(requestedVersion));
foreach (var project in projects.Where(x => x.CompatibleVersions.Contains(requestedVersion)))
{
if (project.ReportsCount > 0 && project.CompatibilityCount == 0)
{
project.TotalRank = -30;
continue;
}
if (project.ReportsCount > 0)
{
project.TotalRank = project.TotalRank + (project.CompatibilityCount + totalProjects);
float compats = project.CompatibilityCount;
float numReps = project.ReportsCount;
var percentage = compats/numReps;
project.CompatibilityScore = percentage;
project.TotalRank = (int) (project.TotalRank*percentage);
}
}
<p class="viewAll">Showing @totalProjects projects</p>
}
}
<ul id="newest-projects">
@foreach (var project in projects.OrderByDescending(x => x.TotalRank).Where(x => x.CompatibleVersions.Contains(requestedVersion)))
{
var node = Library.NodeById(project.Id);
var description = node.Description.ToString();
var category = node.Parent.Name;
var screenshot = node.DefaultScreenshotPath.ToString();
var icon = string.IsNullOrEmpty(screenshot)
? "/css/img/package2.png"
: string.Format("image={0}?bgcolor=fff&width=50&height=50&format=png", screenshot);
<li class="clearfix">
<div class="deliPackage">
<div class="brief">
<a href="@node.Url" class="packageIcon" style="background:url(@icon) no-repeat top left;">Package</a>
<h3><a href="@node.Url">@project.Name</a></h3>
<div class="category">@category</div>
<div class="commercialIndicator @node.ListingType">@node.ListingType</div>
</div>
<div class="hiLite">
<p><a href="@node.Url">@(ShortenText(description))</a></p>
</div>
<div class="popularity">
<div class="karma">
@project.Karma <small>Karma</small>
</div>
<div class="downloads">
@project.TotalDownloads <small>Downloads</small>
</div>
</div>
</div>
</li>
}
</ul>
</div>
</div>
</div>
}
}
@functions {
public Version GetProperVersion(string version)
{
if (version == "4.1.0")
{
return new Version(version);
}
version = version.Replace(".", "");
if (version.EndsWith("x"))
{
version = version.Substring(0, version.IndexOf("x", StringComparison.Ordinal));
}
if (version == "410" || version == "4100")
{
return new Version("4.10");
}
if (version == "411" || version == "4110")
{
return new Version("4.11");
}
if (version.EndsWith("x"))
{
version = version.Substring(0, version.IndexOf("x", StringComparison.Ordinal) - 1);
}
var splitVersion = version.ToCharArray();
version = string.Join(".", splitVersion);
if (version.Length == 1)
{
version = version + ".0";
}
var tempRevision = new Version(version);
return tempRevision.Revision == -1 ? new Version(tempRevision.Major, tempRevision.Minor, 0) : tempRevision;
}
public static string ShortenText(string text)
{
text = Utils.StripHTML(text).Replace("&nbsp;", "");
if (text.Length > 210)
{
text = text.Substring(0, 210);
text = text.Substring(0, text.LastIndexOf(' '));
}
text = Regex.Replace(text, @"[^a-zA-Z0-9\s.?!&;]", ""); //strip all crap from the listing such as ======================================= !!!!
return text.Trim();
}
}
@@ -1,57 +0,0 @@
<%@ Master Language="C#" MasterPageFile="~/umbraco/masterpages/default.master" AutoEventWireup="true" %>
<asp:Content ContentPlaceHolderID="ContentPlaceHolderDefault" runat="server">
<%@ Master Language="C#" MasterPageFile="~/umbraco/masterpages/default.master" AutoEventWireup="true" %>
<asp:Content ContentPlaceHolderID="ContentPlaceHolderDefault" runat="server">
<body onload="JavaScript:timedRefresh(5000);">
<umbraco:Macro runat="server" language="cshtml">
@using System.Threading
@using System.Diagnostics
@using uForum.Businesslogic
@{
var stopwatch1 = new Stopwatch();
stopwatch1.Start();
var records = 10;
if (Request.QueryString["records"] != null)
{
records = int.Parse(Request.QueryString["records"]);
}
var sql = string.Format("SELECT TOP {0} contentNodeId, versionId FROM [our.umbraco.org.live].[dbo].[cmsPropertyData] WHERE contentNodeId IN (SELECT NodeId FROM [our.umbraco.org.live].[dbo].[cmsMember]) AND contentNodeId NOT IN (SELECT contentNodeId FROM [our.umbraco.org.live].[dbo].[cmsPropertyData] WHERE propertytypeid = 203) GROUP BY contentNodeId, versionId", records);
var reader = Data.SqlHelper.ExecuteReader(sql);
while (reader.Read())
{
var contentNodeId = reader.GetInt("contentNodeId");
var versionId = reader.GetGuid("versionId").ToString();
var stopwatch2 = new Stopwatch();
stopwatch2.Start();
Data.SqlHelper.ExecuteNonQuery("INSERT INTO [our.umbraco.org.live].[dbo].[cmsPropertyData] (contentNodeId, versionId, propertyTypeId) VALUES (@id, @versionId, 203)", Data.SqlHelper.CreateParameter("@id", contentNodeId), Data.SqlHelper.CreateParameter("@versionId", versionId));
stopwatch2.Stop();
<span style="font-size: 9px;">@contentNodeId - @stopwatch2.Elapsed.Ticks</span>
}
reader.Close();
reader.Dispose();
stopwatch1.Stop();
<hr />
<p>Updated @records records in @stopwatch1.Elapsed.Seconds seconds</p>
}
</umbraco:Macro>
<script type="text/JavaScript">
<!--
function timedRefresh(timeoutPeriod) {
setTimeout("location.reload(true);",timeoutPeriod);
}
// -->
</script>
</body>
</asp:Content>
</asp:Content>
+133 -139
View File
@@ -5,22 +5,22 @@
<asp:Content ID="Content1" ContentPlaceHolderId="Head" runat="server"> <asp:Content ID="Content1" ContentPlaceHolderId="Head" runat="server">
</asp:Content> </asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderId="Main" runat="server"> <asp:Content ID="Content2" ContentPlaceHolderId="Main" runat="server">
<umbraco:Macro ID="Macro6" Language="cshtml" runat="server"> <umbraco:Macro ID="Macro6" Language="cshtml" runat="server">
@{ @{
if(Request.Params["fromdownload"] != null) { if(Request.Params["fromdownload"] != null) {
var downloads = Model.ReleaseDownload.Where("Visible"); var downloads = Model.ReleaseDownload.Where("Visible");
if(downloads.Any()) if(downloads.Any())
{ {
var downloadIds = new List<int>(); var downloadIds = new List<int>();
foreach (var item in downloads) foreach (var item in downloads)
{ {
downloadIds.Add(item.Id); downloadIds.Add(item.Id);
} }
Response.Redirect("/ReleaseDownload?id=" + downloadIds.First(), false); Response.Redirect("/ReleaseDownload?id=" + downloadIds.First(), false);
} }
} }
} }
</umbraco:Macro> </umbraco:Macro>
<% <%
@@ -29,7 +29,7 @@
var release = allReleases.First(x => x.version == currentPage.Name); var release = allReleases.First(x => x.version == currentPage.Name);
var completedIssues = release.issues.Count(x => x.state == "Fixed"); var completedIssues = release.issues.Count(x => x.state == "Fixed");
var totalIssues = release.issues.Count(); var totalIssues = release.issues.Count();
var percentComplete = Math.Round(((double) 100/totalIssues)*completedIssues); var percentComplete = Math.Round(((double)100 / totalIssues) * completedIssues);
var releaseDateParsed = DateTime.Now; var releaseDateParsed = DateTime.Now;
if (release.releaseDate != string.Empty) if (release.releaseDate != string.Empty)
{ {
@@ -38,7 +38,7 @@
var releaseDate = release.releaseDate == "" ? "Not yet determined" : releaseDateParsed.ToString("dddd, MMMM d yyyy"); var releaseDate = release.releaseDate == "" ? "Not yet determined" : releaseDateParsed.ToString("dddd, MMMM d yyyy");
var umbracoHelper = new Umbraco.Web.UmbracoHelper(UmbracoContext.Current); var umbracoHelper = new Umbraco.Web.UmbracoHelper(UmbracoContext.Current);
var releaseContent = umbracoHelper.TypedContent(umbracoHelper.UmbracoContext.PageId); var releaseContent = umbracoHelper.TypedContent(umbracoHelper.UmbracoContext.PageId);
if (releaseContent != null) if (releaseContent != null)
@@ -60,7 +60,7 @@
<div class="sidebar-area"> <div class="sidebar-area">
<div class="sidebar-content"> <div class="sidebar-content">
<div class="content-wrapper"> <div class="content-wrapper">
<nav> <nav>
<ul class="level-1"> <ul class="level-1">
<% <%
@@ -102,150 +102,112 @@
<div> <div>
<umbraco:Macro linkToCurrent="1" Alias="Breadcrumb" runat="server"></umbraco:Macro> <umbraco:Macro linkToCurrent="1" Alias="Breadcrumb" runat="server"></umbraco:Macro>
</div> </div>
<style>
.release-page .explain h2 {
margin-top: 12px;
font-size: 2em;
margin-bottom: .3rem;
color: rgba(0,0,0,.8);
}
.release-page .dot { <div class="explain flex items-center">
border: none;
}
.release-page .dot.big { <div class="release-progress-indicator flex flex-wrap items-center">
position: relative;
text-indent: 0;
margin: 15px auto 0;
}
.release-page .chart { <span class="dot big progress">
height: 60px;
width: 60px;
top: initial;
left: initial;
text-align: center;
}
.release-page .chart p {
vertical-align: middle;
line-height: 3.7rem;
display: inline-block;
}
.release-page .chart canvas {
top: 0px;
left: 0px;
}
.statuses ul {
list-style-type: none;
}
.statuses ul li {
position: relative;
margin-bottom: 10px;
padding-left: 10px;
}
.statuses li:before {
position: absolute;
top: -4px;
left: -25px;
font-size: 1.5em;
}
</style>
<div class="row explain">
<div class="col-sm-2">
<span class="dot big progress">
<div class="chart" data-percent="<%= percentComplete %>"> <div class="chart" data-percent="<%= percentComplete %>">
<p><%= percentComplete %>%</p> <p><%= percentComplete %>%</p>
</div> </div>
</span> </span>
</div>
<div class="col-sm-10"> <span class="release-progress-version flex flex-column">
<h2> <h2>
v<umbraco:Item ID="Item1" field="pageName" runat="server" /> <strong><umbraco:Item ID="Item1" field="pageName" runat="server" /></strong>
</h2> </h2>
<small>Status: <span><%= release.released ? "Released" : "In Progress" %></span></small> <small>Status: <span><%= release.released ? "Released" : "In Progress" %></span></small>
<% if (release.released == false) <% if (release.released == false)
{ %> { %>
<h3> <h3>
<span><%= percentComplete %>% complete</span> <span><%= percentComplete %>% complete</span>
<span><%= 100 - percentComplete %>% in progress</span> <span><%= 100 - percentComplete %>% in progress</span>
</h3> </h3>
<h3>Target release date: <span style="color:#5B5B5B"><%= releaseDate %></span></h3> <h3>Target release date: <span style="color:#5B5B5B"><%= releaseDate %></span></h3>
<% } %> <% } %>
<umbraco:Macro ID="Macro5" Language="cshtml" runat="server"> <umbraco:Macro ID="Macro5" Language="cshtml" runat="server">
@if(Model.HasValue("releaseNotes")) { @if(Model.HasValue("releaseNotes")) {
<small><p>@Model.releaseNotes</p></small> <small><p>@Model.releaseNotes</p></small>
} }
</umbraco:Macro> </umbraco:Macro>
</span>
</div> </div>
</div> </div>
<div> <div>
<umbraco:Macro ID="Macro2" Language="cshtml" runat="server"> <umbraco:Macro ID="Macro2" Language="cshtml" runat="server">
@{ @{
var downloads = Model.ReleaseDownload.Where("Visible"); var downloads = Model.ReleaseDownload.Where("Visible");
var countIsOdd = ((downloads.Count() & 1) != 0) ? true : false; var countIsOdd = ((downloads.Count() & 1) != 0) ? true : false;
if(downloads.Any()) if(downloads.Any())
{ {
<div class="get-release row"> <div class="get-release">
@foreach (var item in downloads)
{ <div class="release-section flex flex-row flex-wrap">
var background = item.IsFirst() ? "/images/releases/download.png" : "/media/2483095/download.png";
var width = (item.IsLast() && countIsOdd) ? 895 : 380; <!-- Download button -->
var numberOfDownloads = 0; <div class="release-section-group">
int.TryParse(item.NumberOfDownloads, out numberOfDownloads); <h3>Download and install</h3>
numberOfDownloads = numberOfDownloads + OurUmbraco.Our.Utils.GetReleaseDownloadCount(item.Id); @foreach (var item in downloads)
if(item.Name.Contains("WebPI") == false) {
{ if (item.IsFirst())
<div class="release @(item.IsFirst() == false ? "bin" : "zip") col-sm-1"> {
<i class="icon-Download-alt"></i> var numberOfDownloads = 0;
</div> int.TryParse(item.NumberOfDownloads, out numberOfDownloads);
<div class="release @(item.IsFirst() == false ? "bin" : "zip") col-md-5"> numberOfDownloads = numberOfDownloads + OurUmbraco.Our.Utils.GetReleaseDownloadCount(item.Id);
<div class="release-section-action">
<h3><a href="/ReleaseDownload?id=@item.Id" onclick="_gaq.push(['_trackEvent', 'Release', 'Download', '@item.Name']);">@item.Name</a></h3> <a class="button green" href="/ReleaseDownload?id=@item.Id" onclick="ga('send', 'event', 'Release', 'Download', '@item.Name');">Download Umbraco @Model.Name</a>
@if(item.IsFirst()) </div>
{ <p>This is the main Umbraco download, generally you won't need anything else. You can find installation instructions under <strong>"<a href="/documentation/Getting-Started/Setup/Install/install-umbraco-manually">Getting Started</a>"</strong>.</p>
<p>This is the main Umbraco download, generally you won't need anything else.</p> <small>Downloaded @numberOfDownloads times - uploaded @item.UploadDate.ToString("D")</small>
} }
<small>Downloaded @numberOfDownloads times - uploaded @item.UploadDate.ToString("D")</small> }
</div> </div>
} else {
<div style="display: none;"><a href="/ReleaseDownload?id=@item.Id" onclick="_gaq.push(['_trackEvent', 'Release', 'Download', '@item.Name']);">@item.Name</a></div> <!-- NuGet installation -->
@if(Model.HasNuGet) {
<div class="release-section-group">
<h3>Install using NuGet</h3>
<div class="release-section-action">
<code><a href="https://nuget.org/packages/UmbracoCms/@Model.Name" onclick="ga('send', 'event', 'Release', 'NuGetClick', '@Model.Name');">PM&gt; Install-Package UmbracoCms -Version @Model.Name</a></code>
</div>
<p>Installs Umbraco Cms in your Visual Studio ASP.NET project. To install Umbraco Cms, run the above command in the Package Manager Console. <a target="_blank" href="/documentation/Getting-Started/Setup/Install/install-umbraco-with-nuget">Read more in the documentation</a>.</p>
</div>
} }
}
</div>
</div> </div>
} }
} }
</umbraco:Macro> </umbraco:Macro>
<div class="row markdown-syntax"> <div class="row markdown-syntax">
<div class="col-md-5"> <div class="col-md-5">
<% if (release.releaseDescription != string.Empty && currentPage.HasValue("bodyText") == false) <% if (release.releaseDescription != string.Empty && currentPage.HasValue("bodyText") == false)
{ %> { %>
<span> <span>
<h2>Summary</h2> <h2>Summary</h2>
<p><span><%= release.releaseDescription %></span></p> <p><span><%= release.releaseDescription %></span></p>
</span> </span>
<% } %> <% } %>
<umbraco:Macro ID="Macro3" Language="cshtml" runat="server"> <umbraco:Macro ID="Macro3" Language="cshtml" runat="server">
@if(Model.HasValue("bodyText")) { @if(Model.HasValue("bodyText")) {
<h2>Release notes</h2> <h2>Release notes</h2>
@Model.BodyText @Model.BodyText
} }
</umbraco:Macro> </umbraco:Macro>
<h2>Related changes from the issue tracker</h2> <h2>Related changes from the issue tracker</h2>
<div class="panel-wrapper"> <div class="panel-wrapper">
<div class="panel-left"> <div class="panel-left">
@@ -264,8 +226,10 @@
<li class="<%= issue.StateIcon() %>" title="<%= issue.state %>"> <li class="<%= issue.StateIcon() %>" title="<%= issue.state %>">
<a href="http://issues.umbraco.org/issue/<%= issue.id %>" target="_blank"><%= issue.id %> - <%= issue.title %></a> <a href="http://issues.umbraco.org/issue/<%= issue.id %>" target="_blank"><%= issue.id %> - <%= issue.title %></a>
</li> </li>
</ul> </ul>
<% } } else { %> <% }
}
else { %>
<p>No items to display</p> <p>No items to display</p>
<% } %> <% } %>
</div> </div>
@@ -282,8 +246,10 @@
<li class="<%= issue.StateIcon() %>" title="<%= issue.state %>"> <li class="<%= issue.StateIcon() %>" title="<%= issue.state %>">
<a href="http://issues.umbraco.org/issue/<%= issue.id %>" target="_blank"><%= issue.id %> - <%= issue.title %></a> <a href="http://issues.umbraco.org/issue/<%= issue.id %>" target="_blank"><%= issue.id %> - <%= issue.title %></a>
</li> </li>
</ul> </ul>
<% } } else { %> <% }
}
else { %>
<p>No items to display</p> <p>No items to display</p>
<% } %> <% } %>
</div> </div>
@@ -300,18 +266,20 @@
<li class="<%= issue.StateIcon() %>" title="<%= issue.state %>"> <li class="<%= issue.StateIcon() %>" title="<%= issue.state %>">
<a href="http://issues.umbraco.org/issue/<%= issue.id %>" target="_blank"><%= issue.id %> - <%= issue.title %></a> <a href="http://issues.umbraco.org/issue/<%= issue.id %>" target="_blank"><%= issue.id %> - <%= issue.title %></a>
</li> </li>
</ul> </ul>
<% } } else { %> <% }
}
else { %>
<p>No items to display</p> <p>No items to display</p>
<% } %> <% } %>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div><!-- col-md-5 --> </div><!-- col-md-5 -->
<div class="col-md-5 col-md-offset-2"> <div class="col-md-5 col-md-offset-2">
<h2>Getting started</h2> <h2>Getting started</h2>
@@ -327,26 +295,52 @@
<p>You'll find our über active community working hard to help each other at Our Umbraco: <a href="http://our.umbraco.org">http://our.umbraco.org</a></p> <p>You'll find our über active community working hard to help each other at Our Umbraco: <a href="http://our.umbraco.org">http://our.umbraco.org</a></p>
<h2>Upgrading from older versions</h2> <h2>Upgrading from older versions</h2>
<p>Make sure to read the <a href="http://our.umbraco.org/documentation/Installation/Upgrading/">upgrade instructions</a> before you attempt an upgrade.</p> <p>Make sure to read the <a href="http://our.umbraco.org/documentation/Installation/Upgrading/">upgrade instructions</a> before you attempt an upgrade.</p>
<umbraco:Macro ID="Macro4" runat="server" Language="cshtml"> <umbraco:Macro ID="Macro4" runat="server" Language="cshtml">
<h2>Found a bug?</h2> <h2>Found a bug?</h2>
<p>We're happy to help you with any problems you encounter, so please report them in <a href="http://issues.umbraco.org/issues/U4">the issue tracker</a> and use the “Affected versions” field to set it to @Model.Name. <br />Do a search first though, if the issue already exists, give it an extra vote.</p> <p>We're happy to help you with any problems you encounter, so please report them in <a href="http://issues.umbraco.org/issues/U4">the issue tracker</a> and use the “Affected versions” field to set it to @Model.Name. <br />Do a search first though, if the issue already exists, give it an extra vote.</p>
@if(Model.HasValue("linkToChangeset")) { @if(Model.HasValue("linkToChangeset")) {
<h2>Source code</h2> <h2>Source code</h2>
<p>The source for <a href="@Model.LinkToChangeset">this specific release is available for download from the repository</a> (click the "ZIP" button).</p> <p>The source for <a href="@Model.LinkToChangeset">this specific release is available for download from the repository</a> (click the "ZIP" button).</p>
} }
@if(Model.HasNuGet) { <!-- Other files -->
<h2>Also available on NuGet</h2> @{
var downloads = Model.ReleaseDownload.Where("Visible");
<div class="nuget-badge"> var countIsOdd = ((downloads.Count() & 1) != 0) ? true : false;
<a href="https://nuget.org/packages/UmbracoCms/@Model.Name"> if(downloads.Any())
<p><code>PM&gt; Install-Package UmbracoCms -Version @Model.Name</code></p> {
</a>
<div class="release-other-files">
<h2>All files</h2>
@foreach (var item in downloads)
{
var background = item.IsFirst() ? "/images/releases/download.png" : "/media/2483095/download.png";
var width = (item.IsLast() && countIsOdd) ? 895 : 380;
var numberOfDownloads = 0;
int.TryParse(item.NumberOfDownloads, out numberOfDownloads);
numberOfDownloads = numberOfDownloads + OurUmbraco.Our.Utils.GetReleaseDownloadCount(item.Id);
if(item.Name.Contains("WebPI") == false)
{
<div class="release @(item.IsFirst() == false ? "bin" : "zip")">
<div><strong><a href="/ReleaseDownload?id=@item.Id" onclick="ga('send', 'event', 'Release', 'Download', '@item.Name');">@item.Name</a></strong></div>
@if(item.IsFirst())
{
<p>This is the main Umbraco download, generally you won't need anything else.</p>
}
<small>Downloaded @numberOfDownloads times - uploaded @item.UploadDate.ToString("D")</small>
</div>
} else {
<div style="display: none;"><a href="/ReleaseDownload?id=@item.Id" onclick="ga('send', 'event', 'Release', 'Download', '@item.Name');">@item.Name</a></div>
}
}
</div> </div>
} }
}
</umbraco:Macro> </umbraco:Macro>
</div><!-- col-md-5 col-md-offset-2 --> </div><!-- col-md-5 col-md-offset-2 -->
@@ -362,7 +356,7 @@
</asp:Content> </asp:Content>
<asp:Content ContentPlaceHolderId="EndScripts" runat="server"> <asp:Content ContentPlaceHolderId="EndScripts" runat="server">
<script src="https://cdnjs.cloudflare.com/ajax/libs/easy-pie-chart/2.1.4/jquery.easypiechart.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/easy-pie-chart/2.1.4/jquery.easypiechart.min.js"></script>
<script type="text/javascript"> <script type="text/javascript">
setTimeout(function () { setTimeout(function () {
$('.chart').easyPieChart({ $('.chart').easyPieChart({
@@ -29,10 +29,12 @@
currentMember = member.Id; currentMember = member.Id;
} }
Application.SqlHelper.ExecuteNonQuery( using (var sqlHelper = Application.SqlHelper)
@"insert into projectDownload(projectId,memberId,timestamp) values(@id, @memberId, getdate())", {
Application.SqlHelper.CreateParameter("@id", docId), sqlHelper.ExecuteNonQuery(@"insert into projectDownload(projectId,memberId,timestamp) values(@id, @memberId, getdate())",
Application.SqlHelper.CreateParameter("@memberId", currentMember)); sqlHelper.CreateParameter("@id", docId),
sqlHelper.CreateParameter("@memberId", currentMember));
}
Response.Redirect(link, false); Response.Redirect(link, false);
} }
@@ -149,32 +149,32 @@ The five people with most votes from 15 March until 15 April 2011 will become 20
<p><strong>You need to <a href="http://our.umbraco.org/member/login?redirectUrl=http://our.umbraco.org/UmbracoMVP2011">log in</a> before casting your vote.</strong></p> <p><strong>You need to <a href="http://our.umbraco.org/member/login?redirectUrl=http://our.umbraco.org/UmbracoMVP2011">log in</a> before casting your vote.</strong></p>
<%}else{ <%}else{
// Umbraco.Forms.Data.Storage.RecordStorage s = new Umbraco.Forms.Data.Storage.RecordStorage();
//var all = s.GetAllRecords(new Guid("12c58e28-ca9e-4e05-9849-8ae8ed555109"));
//var voted = all.Find(r => r.MemberKey.ToString() == umbraco.cms.businesslogic.member.Member.GetCurrentMember().Id.ToString()); // Umbraco.Forms.Data.Storage.RecordStorage s = new Umbraco.Forms.Data.Storage.RecordStorage();
//var all = s.GetAllRecords(new Guid("12c58e28-ca9e-4e05-9849-8ae8ed555109"));
System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(System.Configuration.ConfigurationManager.AppSettings["umbracoDbDSN"]);
System.Data.SqlClient.SqlCommand comm = new System.Data.SqlClient.SqlCommand( //var voted = all.Find(r => r.MemberKey.ToString() == umbraco.cms.businesslogic.member.Member.GetCurrentMember().Id.ToString());
"SELECT 1 FROM UFRecords where form = '12C58E28-CA9E-4E05-9849-8AE8ED555109' and memberkey = @memberkey",
conn); System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(System.Configuration.ConfigurationManager.AppSettings["umbracoDbDSN"]);
System.Data.SqlClient.SqlCommand comm = new System.Data.SqlClient.SqlCommand(
"SELECT 1 FROM UFRecords where form = '12C58E28-CA9E-4E05-9849-8AE8ED555109' and memberkey = @memberkey",
conn);
comm.Parameters.AddWithValue("@memberkey",umbraco.cms.businesslogic.member.Member.GetCurrentMember().Id); comm.Parameters.AddWithValue("@memberkey",umbraco.cms.businesslogic.member.Member.GetCurrentMember().Id);
conn.Open(); conn.Open();
bool membervoted = false; bool membervoted = false;
System.Data.SqlClient.SqlDataReader rdr = comm.ExecuteReader(); using (var reader = comm.ExecuteReader())
while (rdr.Read())
{ {
membervoted = true; while (reader.Read())
{
membervoted = true;
}
conn.Close();
} }
conn.Close();
if (membervoted == false)
{
if (membervoted == false)
{
%> %>
+9 -9
View File
@@ -1,15 +1,15 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="AspNetMvc" version="3.0.20105.1" targetFramework="net4" /> <package id="AspNetMvc" version="3.0.20105.1" targetFramework="net4" />
<package id="AutoMapper" version="3.0.0" targetFramework="net452" /> <package id="AutoMapper" version="3.3.1" targetFramework="net452" />
<package id="ClientDependency" version="1.9.1" targetFramework="net452" /> <package id="ClientDependency" version="1.9.2" targetFramework="net452" />
<package id="ClientDependency-Mvc" version="1.8.0.0" targetFramework="net451" /> <package id="ClientDependency-Mvc" version="1.8.0.0" targetFramework="net451" />
<package id="ClientDependency-Mvc5" version="1.8.0.0" targetFramework="net452" /> <package id="ClientDependency-Mvc5" version="1.8.0.0" targetFramework="net452" />
<package id="EasyHttp" version="1.6.29.0" targetFramework="net451" /> <package id="EasyHttp" version="1.6.29.0" targetFramework="net451" />
<package id="Examine" version="0.1.69.0" targetFramework="net452" /> <package id="Examine" version="0.1.70.0" targetFramework="net452" />
<package id="HtmlAgilityPack" version="1.4.9" targetFramework="net452" /> <package id="HtmlAgilityPack" version="1.4.9.5" targetFramework="net452" />
<package id="ImageProcessor" version="2.4.4.0" targetFramework="net452" /> <package id="ImageProcessor" version="2.4.5.0" targetFramework="net452" />
<package id="ImageProcessor.Web" version="4.6.4.0" targetFramework="net452" /> <package id="ImageProcessor.Web" version="4.6.6.0" targetFramework="net452" />
<package id="jQuery" version="1.4.1" targetFramework="net451" /> <package id="jQuery" version="1.4.1" targetFramework="net451" />
<package id="jQuery.Validation" version="1.8" targetFramework="net451" /> <package id="jQuery.Validation" version="1.8" targetFramework="net451" />
<package id="jQuery.Validation.Unobtrusive" version="2.0.20710.0" targetFramework="net451" /> <package id="jQuery.Validation.Unobtrusive" version="2.0.20710.0" targetFramework="net451" />
@@ -50,9 +50,9 @@
<package id="SharpZipLib" version="0.86.0" targetFramework="net452" /> <package id="SharpZipLib" version="0.86.0" targetFramework="net452" />
<package id="System.Collections.Immutable" version="1.1.36" targetFramework="net452" /> <package id="System.Collections.Immutable" version="1.1.36" targetFramework="net452" />
<package id="System.Reflection.Metadata" version="1.0.21" targetFramework="net452" /> <package id="System.Reflection.Metadata" version="1.0.21" targetFramework="net452" />
<package id="Umbraco.ModelsBuilder" version="3.0.4" targetFramework="net452" /> <package id="Umbraco.ModelsBuilder" version="3.0.5" targetFramework="net452" />
<package id="UmbracoCms" version="7.5.3" targetFramework="net452" /> <package id="UmbracoCms" version="7.5.5" targetFramework="net452" />
<package id="UmbracoCms.Core" version="7.5.3" targetFramework="net452" /> <package id="UmbracoCms.Core" version="7.5.5" targetFramework="net452" />
<package id="UmbracoCms.IdentityExtensions" version="1.0.0" targetFramework="net451" /> <package id="UmbracoCms.IdentityExtensions" version="1.0.0" targetFramework="net451" />
<package id="UmbracoCms.IdentityExtensions.Google" version="1.0.0" targetFramework="net451" /> <package id="UmbracoCms.IdentityExtensions.Google" version="1.0.0" targetFramework="net451" />
<package id="UrlRewritingNet" version="2.0.7" targetFramework="net452" /> <package id="UrlRewritingNet" version="2.0.7" targetFramework="net452" />
@@ -1,24 +1,24 @@
@inherits Umbraco.Web.Macros.PartialViewMacroPage @inherits Umbraco.Web.Macros.PartialViewMacroPage
@* @*
This snippet makes a breadcrumb of parents using an unordered html list. This snippet makes a breadcrumb of parents using an unordered html list.
How it works: How it works:
- It uses the Ancestors() method to get all parents and then generates links so the visitor can go back - It uses the Ancestors() method to get all parents and then generates links so the visitor can go back
- Finally it outputs the name of the current page (without a link) - Finally it outputs the name of the current page (without a link)
*@ *@
@{ var selection = CurrentPage.Ancestors(); } @{ var selection = CurrentPage.Ancestors(); }
@if (selection.Any()) @if (selection.Any())
{ {
<ul class="breadcrumb"> <ul class="breadcrumb">
@* For each page in the ancestors collection which have been ordered by Level (so we start with the highest top node first) *@ @* For each page in the ancestors collection which have been ordered by Level (so we start with the highest top node first) *@
@foreach (var item in selection.OrderBy("Level")) @foreach (var item in selection.OrderBy("Level"))
{ {
<li><a href="@item.Url">@item.Name</a> <span class="divider">/</span></li> <li><a href="@item.Url">@item.Name</a> <span class="divider">/</span></li>
} }
@* Display the current page as the last item in the list *@ @* Display the current page as the last item in the list *@
<li class="active">@CurrentPage.Name</li> <li class="active">@CurrentPage.Name</li>
</ul> </ul>
} }
@@ -1,66 +1,66 @@
@inherits Umbraco.Web.Macros.PartialViewMacroPage @inherits Umbraco.Web.Macros.PartialViewMacroPage
@using System.Web.Mvc.Html @using System.Web.Mvc.Html
@using ClientDependency.Core.Mvc @using ClientDependency.Core.Mvc
@using Umbraco.Web @using Umbraco.Web
@using Umbraco.Web.Controllers @using Umbraco.Web.Controllers
@{ @{
var profileModel = Members.GetCurrentMemberProfileModel(); var profileModel = Members.GetCurrentMemberProfileModel();
Html.EnableClientValidation(); Html.EnableClientValidation();
Html.EnableUnobtrusiveJavaScript(); Html.EnableUnobtrusiveJavaScript();
Html.RequiresJs("/umbraco_client/ui/jquery.js"); Html.RequiresJs("/umbraco_client/ui/jquery.js");
Html.RequiresJs("/umbraco_client/Application/JQuery/jquery.validate.min.js"); Html.RequiresJs("/umbraco_client/Application/JQuery/jquery.validate.min.js");
Html.RequiresJs("/umbraco_client/Application/JQuery/jquery.validate.unobtrusive.min.js"); Html.RequiresJs("/umbraco_client/Application/JQuery/jquery.validate.unobtrusive.min.js");
var success = TempData["ProfileUpdateSuccess"] != null; var success = TempData["ProfileUpdateSuccess"] != null;
} }
@*NOTE: This RenderJsHere code should be put on your main template page where the rest of your script tags are placed*@ @*NOTE: This RenderJsHere code should be put on your main template page where the rest of your script tags are placed*@
@Html.RenderJsHere() @Html.RenderJsHere()
@if (Members.IsLoggedIn() && profileModel != null) @if (Members.IsLoggedIn() && profileModel != null)
{ {
if (success) if (success)
{ {
@* This message will show if RedirectOnSucces is set to false (default) *@ @* This message will show if RedirectOnSucces is set to false (default) *@
<p>Profile updated</p> <p>Profile updated</p>
} }
using (Html.BeginUmbracoForm<UmbProfileController>("HandleUpdateProfile")) using (Html.BeginUmbracoForm<UmbProfileController>("HandleUpdateProfile"))
{ {
<fieldset> <fieldset>
<legend>Edit profile</legend> <legend>Edit profile</legend>
@Html.ValidationSummary("profileModel", true) @Html.ValidationSummary("profileModel", true)
@Html.LabelFor(m => profileModel.Name) @Html.LabelFor(m => profileModel.Name)
@Html.TextBoxFor(m => profileModel.Name) @Html.TextBoxFor(m => profileModel.Name)
@Html.ValidationMessageFor(m => profileModel.Name) @Html.ValidationMessageFor(m => profileModel.Name)
<br /> <br />
@Html.LabelFor(m => profileModel.Email) @Html.LabelFor(m => profileModel.Email)
@Html.TextBoxFor(m => profileModel.Email) @Html.TextBoxFor(m => profileModel.Email)
@Html.ValidationMessageFor(m => profileModel.Email) @Html.ValidationMessageFor(m => profileModel.Email)
<br /> <br />
@for (var i = 0; i < profileModel.MemberProperties.Count; i++) @for (var i = 0; i < profileModel.MemberProperties.Count; i++)
{ {
@Html.LabelFor(m => profileModel.MemberProperties[i].Value, profileModel.MemberProperties[i].Name) @Html.LabelFor(m => profileModel.MemberProperties[i].Value, profileModel.MemberProperties[i].Name)
@* @*
By default this will render a textbox but if you want to change the editor template for this property you can By default this will render a textbox but if you want to change the editor template for this property you can
easily change it. For example, if you wanted to render a custom editor for this field called "MyEditor" you would easily change it. For example, if you wanted to render a custom editor for this field called "MyEditor" you would
create a file at ~/Views/Shared/EditorTemplates/MyEditor.cshtml", then you will change the next line of code to create a file at ~/Views/Shared/EditorTemplates/MyEditor.cshtml", then you will change the next line of code to
render your specific editor template like: render your specific editor template like:
@Html.EditorFor(m => profileModel.MemberProperties[i].Value, "MyEditor") @Html.EditorFor(m => profileModel.MemberProperties[i].Value, "MyEditor")
*@ *@
@Html.EditorFor(m => profileModel.MemberProperties[i].Value) @Html.EditorFor(m => profileModel.MemberProperties[i].Value)
@Html.HiddenFor(m => profileModel.MemberProperties[i].Alias) @Html.HiddenFor(m => profileModel.MemberProperties[i].Alias)
<br /> <br />
} }
<button>Save</button> <button>Save</button>
</fieldset> </fieldset>
} }
} }
@@ -1,50 +1,50 @@
@inherits Umbraco.Web.Macros.PartialViewMacroPage @inherits Umbraco.Web.Macros.PartialViewMacroPage
@* @*
Macro to display a gallery of images from media the media section. Macro to display a gallery of images from media the media section.
Works with either a 'Single Media Picker' or a 'Multiple Media Picker' macro parameter (see below). Works with either a 'Single Media Picker' or a 'Multiple Media Picker' macro parameter (see below).
How it works: How it works:
- Confirm the macro parameter has been passed in with a value - Confirm the macro parameter has been passed in with a value
- Loop through all the media Id's passed in (might be a single item, might be many) - Loop through all the media Id's passed in (might be a single item, might be many)
- Display any individual images, as well as any folders of images - Display any individual images, as well as any folders of images
Macro Parameters To Create, for this macro to work: Macro Parameters To Create, for this macro to work:
Alias:mediaIds Name:Select folders and/or images Type: Multiple Media Picker Alias:mediaIds Name:Select folders and/or images Type: Multiple Media Picker
Type: (note: you can use a Single Media Picker if that's more appropriate to your needs) Type: (note: you can use a Single Media Picker if that's more appropriate to your needs)
*@ *@
@{ var mediaIds = Model.MacroParameters["mediaIds"]; } @{ var mediaIds = Model.MacroParameters["mediaIds"]; }
@if (mediaIds != null) @if (mediaIds != null)
{ {
<ul class="thumbnails"> <ul class="thumbnails">
@foreach (var mediaId in mediaIds.ToString().Split(',')) @foreach (var mediaId in mediaIds.ToString().Split(','))
{ {
var media = Umbraco.Media(mediaId); var media = Umbraco.Media(mediaId);
@* a single image *@ @* a single image *@
if (media.DocumentTypeAlias == "Image") if (media.DocumentTypeAlias == "Image")
{ {
@Render(media); @Render(media);
} }
@* a folder with images under it *@ @* a folder with images under it *@
if (media.Children("Image").Any()) if (media.Children("Image").Any())
{ {
foreach (var image in media.Children("Image")) foreach (var image in media.Children("Image"))
{ {
@Render(image); @Render(image);
} }
} }
} }
</ul> </ul>
} }
@helper Render(dynamic item) @helper Render(dynamic item)
{ {
<li class="span2"> <li class="span2">
<a href="@item.umbracoFile.src" class="thumbnail"> <a href="@item.umbracoFile.src" class="thumbnail">
<img src="@item.umbracoFile.src" alt="@item.Name" /> <img src="@item.umbracoFile.src" alt="@item.Name" />
</a> </a>
</li> </li>
} }
@@ -1,24 +1,24 @@
@inherits Umbraco.Web.Macros.PartialViewMacroPage @inherits Umbraco.Web.Macros.PartialViewMacroPage
@* @*
This snippet makes a list of links to the of parents of the current page using an unordered html list. This snippet makes a list of links to the of parents of the current page using an unordered html list.
How it works: How it works:
- It uses the Ancestors() method to get all parents and then generates links so the visitor can go back - It uses the Ancestors() method to get all parents and then generates links so the visitor can go back
- Finally it outputs the name of the current page (without a link) - Finally it outputs the name of the current page (without a link)
*@ *@
@{ var selection = CurrentPage.Ancestors(); } @{ var selection = CurrentPage.Ancestors(); }
@if (selection.Any()) @if (selection.Any())
{ {
<ul> <ul>
@* For each page in the ancestors collection which have been ordered by Level (so we start with the highest top node first) *@ @* For each page in the ancestors collection which have been ordered by Level (so we start with the highest top node first) *@
@foreach (var item in selection.OrderBy("Level")) @foreach (var item in selection.OrderBy("Level"))
{ {
<li><a href="@item.Url">@item.Name</a> &raquo;</li> <li><a href="@item.Url">@item.Name</a> &raquo;</li>
} }
@* Display the current page as the last item in the list *@ @* Display the current page as the last item in the list *@
<li>@CurrentPage.Name</li> <li>@CurrentPage.Name</li>
</ul> </ul>
} }
@@ -1,33 +1,33 @@
@inherits Umbraco.Web.Macros.PartialViewMacroPage @inherits Umbraco.Web.Macros.PartialViewMacroPage
@* @*
Macro to list all child pages under a specific page in the content tree. Macro to list all child pages under a specific page in the content tree.
How it works: How it works:
- Confirm the startNodeId macro parameter has been passed in with a value - Confirm the startNodeId macro parameter has been passed in with a value
- Loop through all child pages - Loop through all child pages
- Display a list of link to those pages, sorted by the value of the propertyAlias - Display a list of link to those pages, sorted by the value of the propertyAlias
Macro Parameters To Create, for this macro to work: Macro Parameters To Create, for this macro to work:
Alias:startNodeId Name:Select starting page Type:Content Picker Alias:startNodeId Name:Select starting page Type:Content Picker
*@ *@
@{ var startNodeId = Model.MacroParameters["startNodeId"]; } @{ var startNodeId = Model.MacroParameters["startNodeId"]; }
@if (startNodeId != null) @if (startNodeId != null)
{ {
@* Get the starting page *@ @* Get the starting page *@
var startNode = Umbraco.Content(startNodeId); var startNode = Umbraco.Content(startNodeId);
var selection = startNode.Children.Where("Visible"); var selection = startNode.Children.Where("Visible");
if (selection.Any()) if (selection.Any())
{ {
<ul> <ul>
@foreach (var item in selection) @foreach (var item in selection)
{ {
<li> <li>
<a href="@item.Url">@item.Name</a> <a href="@item.Url">@item.Name</a>
</li> </li>
} }
</ul> </ul>
} }
} }
@@ -1,15 +1,15 @@
@inherits Umbraco.Web.Macros.PartialViewMacroPage @inherits Umbraco.Web.Macros.PartialViewMacroPage
@{ var selection = CurrentPage.Children.Where("Visible"); } @{ var selection = CurrentPage.Children.Where("Visible"); }
@if (selection.Any()) @if (selection.Any())
{ {
<ul> <ul>
@foreach (var item in selection) @foreach (var item in selection)
{ {
<li> <li>
<a href="@item.Url">@item.Name</a> <a href="@item.Url">@item.Name</a>
</li> </li>
} }
</ul> </ul>
} }
@@ -1,11 +1,11 @@
@inherits Umbraco.Web.Macros.PartialViewMacroPage @inherits Umbraco.Web.Macros.PartialViewMacroPage
@{ var selection = CurrentPage.Children.Where("Visible").OrderBy("CreateDate desc"); } @{ var selection = CurrentPage.Children.Where("Visible").OrderBy("CreateDate desc"); }
@* OrderBy() takes the property to sort by and optionally order desc/asc *@ @* OrderBy() takes the property to sort by and optionally order desc/asc *@
<ul> <ul>
@foreach (var item in selection) @foreach (var item in selection)
{ {
<li><a href="@item.Url">@item.Name</a></li> <li><a href="@item.Url">@item.Name</a></li>
} }
</ul> </ul>
@@ -1,11 +1,11 @@
@inherits Umbraco.Web.Mvc.UmbracoTemplatePage @inherits Umbraco.Web.Mvc.UmbracoTemplatePage
@{ var selection = CurrentPage.Children.Where("Visible").OrderBy("Name"); } @{ var selection = CurrentPage.Children.Where("Visible").OrderBy("Name"); }
@* OrderBy() takes the property to sort by *@ @* OrderBy() takes the property to sort by *@
<ul> <ul>
@foreach (var item in selection) @foreach (var item in selection)
{ {
<li><a href="@item.Url">@item.Name</a></li> <li><a href="@item.Url">@item.Name</a></li>
} }
</ul> </ul>
@@ -1,26 +1,26 @@
@inherits Umbraco.Web.Macros.PartialViewMacroPage @inherits Umbraco.Web.Macros.PartialViewMacroPage
@* @*
Macro to list all child pages with a specific property, sorted by the value of that property. Macro to list all child pages with a specific property, sorted by the value of that property.
How it works: How it works:
- Confirm the propertyAlias macro parameter has been passed in with a value - Confirm the propertyAlias macro parameter has been passed in with a value
- Loop through all child pages that have the propertyAlias - Loop through all child pages that have the propertyAlias
- Display a list of link to those pages, sorted by the value of the propertyAlias - Display a list of link to those pages, sorted by the value of the propertyAlias
Macro Parameters To Create, for this macro to work: Macro Parameters To Create, for this macro to work:
Alias:propertyAlias Name:Property Alias Type:Textbox Alias:propertyAlias Name:Property Alias Type:Textbox
*@ *@
@{ var propertyAlias = Model.MacroParameters["propertyAlias"]; } @{ var propertyAlias = Model.MacroParameters["propertyAlias"]; }
@if (propertyAlias != null) @if (propertyAlias != null)
{ {
var selection = CurrentPage.Children.Where("Visible").OrderBy(propertyAlias); var selection = CurrentPage.Children.Where("Visible").OrderBy(propertyAlias);
<ul> <ul>
@foreach (var item in selection) @foreach (var item in selection)
{ {
<li><a href="@item.Url">@item.Name</a></li> <li><a href="@item.Url">@item.Name</a></li>
} }
</ul> </ul>
} }
@@ -1,25 +1,25 @@
@inherits Umbraco.Web.Macros.PartialViewMacroPage @inherits Umbraco.Web.Macros.PartialViewMacroPage
@* @*
This snippet shows how simple it is to fetch only children of a certain Document Type using Razor. This snippet shows how simple it is to fetch only children of a certain Document Type using Razor.
Be sure to change "DocumentTypeAlias" below to match your needs, such as "TextPage" or "NewsItems". Be sure to change "DocumentTypeAlias" below to match your needs, such as "TextPage" or "NewsItems".
(You can find the alias of your Document Type by editing it in the Settings section) (You can find the alias of your Document Type by editing it in the Settings section)
*@ *@
@{ var selection = CurrentPage.Children("DocumentTypeAlias").Where("Visible"); } @{ var selection = CurrentPage.Children("DocumentTypeAlias").Where("Visible"); }
@* @*
As an example of more querying, if you have a true/false property with the alias of shouldBeFeatured: As an example of more querying, if you have a true/false property with the alias of shouldBeFeatured:
var selection= CurrentPage.Children("DocumentTypeAlias").Where("shouldBeFeatured == true").Where("Visible"); var selection= CurrentPage.Children("DocumentTypeAlias").Where("shouldBeFeatured == true").Where("Visible");
*@ *@
@if (selection.Any()) @if (selection.Any())
{ {
<ul> <ul>
@foreach (var item in selection) @foreach (var item in selection)
{ {
<li><a href="@item.Url">@item.Name</a></li> <li><a href="@item.Url">@item.Name</a></li>
} }
</ul> </ul>
} }
@@ -1,61 +1,61 @@
@inherits Umbraco.Web.Mvc.UmbracoTemplatePage @inherits Umbraco.Web.Mvc.UmbracoTemplatePage
@* @*
This snippet creates links for every single page (no matter how deep) below This snippet creates links for every single page (no matter how deep) below
the page currently being viewed by the website visitor, displayed as nested unordered html lists. the page currently being viewed by the website visitor, displayed as nested unordered html lists.
*@ *@
@{ var selection = CurrentPage.Children.Where("Visible"); } @{ var selection = CurrentPage.Children.Where("Visible"); }
@* Ensure that the Current Page has children *@ @* Ensure that the Current Page has children *@
@if (selection.Any()) @if (selection.Any())
{ {
@* Get the first page in the children, where the property umbracoNaviHide is not True *@ @* Get the first page in the children, where the property umbracoNaviHide is not True *@
var naviLevel = CurrentPage.FirstChild().Where("Visible").Level; var naviLevel = CurrentPage.FirstChild().Where("Visible").Level;
@* Add in level for a CSS hook *@ @* Add in level for a CSS hook *@
<ul class="level-@naviLevel"> <ul class="level-@naviLevel">
@* For each child page where the property umbracoNaviHide is not True *@ @* For each child page where the property umbracoNaviHide is not True *@
@foreach (var item in selection) @foreach (var item in selection)
{ {
<li> <li>
<a href="@item.Url">@item.Name</a> <a href="@item.Url">@item.Name</a>
@* if this child page has any children, where the property umbracoNaviHide is not True *@ @* if this child page has any children, where the property umbracoNaviHide is not True *@
@if (item.Children.Where("Visible").Any()) @if (item.Children.Where("Visible").Any())
{ {
@* Call our helper to display the children *@ @* Call our helper to display the children *@
@childPages(item.Children) @childPages(item.Children)
} }
</li> </li>
} }
</ul> </ul>
} }
@helper childPages(dynamic selection) @helper childPages(dynamic selection)
{ {
@* Ensure that we have a collection of pages *@ @* Ensure that we have a collection of pages *@
if (selection.Any()) if (selection.Any())
{ {
@* Get the first page in pages and get the level *@ @* Get the first page in pages and get the level *@
var naviLevel = selection.First().Level; var naviLevel = selection.First().Level;
@* Add in level for a CSS hook *@ @* Add in level for a CSS hook *@
<ul class="level-@(naviLevel)"> <ul class="level-@(naviLevel)">
@foreach (var item in selection.Where("Visible")) @foreach (var item in selection.Where("Visible"))
{ {
<li> <li>
<a href="@item.Url">@item.Name</a> <a href="@item.Url">@item.Name</a>
@* if the this page has any children, where the property umbracoNaviHide is not True *@ @* if the this page has any children, where the property umbracoNaviHide is not True *@
@if (item.Children.Where("Visible").Any()) @if (item.Children.Where("Visible").Any())
{ {
@* Call our helper to display the children *@ @* Call our helper to display the children *@
@childPages(item.Children) @childPages(item.Children)
} }
</li> </li>
} }
</ul> </ul>
} }
} }
@@ -1,33 +1,33 @@
@inherits Umbraco.Web.Macros.PartialViewMacroPage @inherits Umbraco.Web.Macros.PartialViewMacroPage
@* @*
Macro to display a series of images from a media folder. Macro to display a series of images from a media folder.
How it works: How it works:
- Confirm the macro parameter has been passed in with a value - Confirm the macro parameter has been passed in with a value
- Loop through all the media Id's passed in (might be a single item, might be many) - Loop through all the media Id's passed in (might be a single item, might be many)
- Display any individual images, as well as any folders of images - Display any individual images, as well as any folders of images
Macro Parameters To Create, for this macro to work: Macro Parameters To Create, for this macro to work:
Alias:mediaId Name:Select folder with images Type:Single Media Picker Alias:mediaId Name:Select folder with images Type:Single Media Picker
*@ *@
@{ var mediaId = Model.MacroParameters["mediaId"]; } @{ var mediaId = Model.MacroParameters["mediaId"]; }
@if (mediaId != null) @if (mediaId != null)
{ {
@* Get all the media item associated with the id passed in *@ @* Get all the media item associated with the id passed in *@
var media = Umbraco.Media(mediaId); var media = Umbraco.Media(mediaId);
var selection = media.Children("Image"); var selection = media.Children("Image");
if (selection.Any()) if (selection.Any())
{ {
<ul> <ul>
@foreach (var item in selection) @foreach (var item in selection)
{ {
<li> <li>
<img src="@item.umbracoFile" alt="@item.Name" /> <img src="@item.umbracoFile" alt="@item.Name" />
</li> </li>
} }
</ul> </ul>
} }
} }
@@ -1,41 +1,41 @@
@inherits Umbraco.Web.Macros.PartialViewMacroPage @inherits Umbraco.Web.Macros.PartialViewMacroPage
@using System.Web.Mvc.Html @using System.Web.Mvc.Html
@using ClientDependency.Core.Mvc @using ClientDependency.Core.Mvc
@using Umbraco.Web @using Umbraco.Web
@using Umbraco.Web.Models @using Umbraco.Web.Models
@using Umbraco.Web.Controllers @using Umbraco.Web.Controllers
@{ @{
var loginModel = new LoginModel(); var loginModel = new LoginModel();
Html.EnableClientValidation(); Html.EnableClientValidation();
Html.EnableUnobtrusiveJavaScript(); Html.EnableUnobtrusiveJavaScript();
Html.RequiresJs("/umbraco_client/ui/jquery.js"); Html.RequiresJs("/umbraco_client/ui/jquery.js");
Html.RequiresJs("/umbraco_client/Application/JQuery/jquery.validate.min.js"); Html.RequiresJs("/umbraco_client/Application/JQuery/jquery.validate.min.js");
Html.RequiresJs("/umbraco_client/Application/JQuery/jquery.validate.unobtrusive.min.js"); Html.RequiresJs("/umbraco_client/Application/JQuery/jquery.validate.unobtrusive.min.js");
} }
@* NOTE: This RenderJsHere code should be put on your main template page where the rest of your script tags are placed *@ @* NOTE: This RenderJsHere code should be put on your main template page where the rest of your script tags are placed *@
@Html.RenderJsHere() @Html.RenderJsHere()
@using (Html.BeginUmbracoForm<UmbLoginController>("HandleLogin")) @using (Html.BeginUmbracoForm<UmbLoginController>("HandleLogin"))
{ {
<fieldset> <fieldset>
<legend>Login</legend> <legend>Login</legend>
@Html.ValidationSummary("loginModel", true) @Html.ValidationSummary("loginModel", true)
@Html.LabelFor(m => loginModel.Username) @Html.LabelFor(m => loginModel.Username)
@Html.TextBoxFor(m => loginModel.Username) @Html.TextBoxFor(m => loginModel.Username)
@Html.ValidationMessageFor(m => loginModel.Username) @Html.ValidationMessageFor(m => loginModel.Username)
<br /> <br />
@Html.LabelFor(m => loginModel.Password) @Html.LabelFor(m => loginModel.Password)
@Html.PasswordFor(m => loginModel.Password) @Html.PasswordFor(m => loginModel.Password)
@Html.ValidationMessageFor(m => loginModel.Password) @Html.ValidationMessageFor(m => loginModel.Password)
<br /> <br />
<button>Login</button> <button>Login</button>
</fieldset> </fieldset>
} }
@@ -1,43 +1,43 @@
@inherits Umbraco.Web.Macros.PartialViewMacroPage @inherits Umbraco.Web.Macros.PartialViewMacroPage
@using System.Web.Mvc.Html @using System.Web.Mvc.Html
@using ClientDependency.Core.Mvc @using ClientDependency.Core.Mvc
@using Umbraco.Web @using Umbraco.Web
@using Umbraco.Web.Models @using Umbraco.Web.Models
@using Umbraco.Web.Controllers @using Umbraco.Web.Controllers
@{ @{
var loginStatusModel = Members.GetCurrentLoginStatus(); var loginStatusModel = Members.GetCurrentLoginStatus();
Html.EnableClientValidation(); Html.EnableClientValidation();
Html.EnableUnobtrusiveJavaScript(); Html.EnableUnobtrusiveJavaScript();
Html.RequiresJs("/umbraco_client/ui/jquery.js"); Html.RequiresJs("/umbraco_client/ui/jquery.js");
Html.RequiresJs("/umbraco_client/Application/JQuery/jquery.validate.min.js"); Html.RequiresJs("/umbraco_client/Application/JQuery/jquery.validate.min.js");
Html.RequiresJs("/umbraco_client/Application/JQuery/jquery.validate.unobtrusive.min.js"); Html.RequiresJs("/umbraco_client/Application/JQuery/jquery.validate.unobtrusive.min.js");
var logoutModel = new PostRedirectModel(); var logoutModel = new PostRedirectModel();
@* @*
Here you can specify a redirect URL for after logging out, by default umbraco will simply Here you can specify a redirect URL for after logging out, by default umbraco will simply
redirect to the current page. Example to redirect to the home page: redirect to the current page. Example to redirect to the home page:
logoutModel.RedirectUrl = "/"; logoutModel.RedirectUrl = "/";
*@ *@
} }
@* NOTE: This RenderJsHere code should be put on your main template page where the rest of your script tags are placed *@ @* NOTE: This RenderJsHere code should be put on your main template page where the rest of your script tags are placed *@
@Html.RenderJsHere() @Html.RenderJsHere()
@if (loginStatusModel.IsLoggedIn) @if (loginStatusModel.IsLoggedIn)
{ {
<p>You are currently logged in as @loginStatusModel.Name</p> <p>You are currently logged in as @loginStatusModel.Name</p>
using (Html.BeginUmbracoForm<UmbLoginStatusController>("HandleLogout")) using (Html.BeginUmbracoForm<UmbLoginStatusController>("HandleLogout"))
{ {
<fieldset> <fieldset>
<legend>Logout</legend> <legend>Logout</legend>
<button>Logout</button> <button>Logout</button>
</fieldset> </fieldset>
@Html.HiddenFor(m => logoutModel.RedirectUrl) @Html.HiddenFor(m => logoutModel.RedirectUrl)
} }
} }
@@ -1,21 +1,21 @@
@inherits Umbraco.Web.Macros.PartialViewMacroPage @inherits Umbraco.Web.Macros.PartialViewMacroPage
@* @*
This snippet lists the items from a Multinode tree picker, using the pickers default settings. This snippet lists the items from a Multinode tree picker, using the pickers default settings.
Content Values stored as xml. Content Values stored as xml.
To get it working with any site's data structure, set the selection equal to the property which has the To get it working with any site's data structure, set the selection equal to the property which has the
multinode treepicker (so: replace "PropertyWithPicker" with the alias of your property). multinode treepicker (so: replace "PropertyWithPicker" with the alias of your property).
*@ *@
@{ var selection = CurrentPage.PropertyWithPicker.Split(','); } @{ var selection = CurrentPage.PropertyWithPicker.Split(','); }
<ul> <ul>
@foreach (var id in selection) @foreach (var id in selection)
{ {
var item = Umbraco.Content(id); var item = Umbraco.Content(id);
<li> <li>
<a href="@item.Url">@item.Name</a> <a href="@item.Url">@item.Name</a>
</li> </li>
} }
</ul> </ul>
@@ -1,18 +1,18 @@
@inherits Umbraco.Web.Macros.PartialViewMacroPage @inherits Umbraco.Web.Macros.PartialViewMacroPage
@* @*
This snippet displays a list of links of the pages immediately under the top-most page in the content tree. This snippet displays a list of links of the pages immediately under the top-most page in the content tree.
This is the home page for a standard website. This is the home page for a standard website.
It also highlights the current active page/section in the navigation with the css class "current". It also highlights the current active page/section in the navigation with the css class "current".
*@ *@
@{ var selection = CurrentPage.Site().Children.Where("Visible"); } @{ var selection = CurrentPage.Site().Children.Where("Visible"); }
<ul> <ul>
@foreach (var item in selection) @foreach (var item in selection)
{ {
<li class="@(item.IsAncestorOrSelf(CurrentPage) ? "current" : null)"> <li class="@(item.IsAncestorOrSelf(CurrentPage) ? "current" : null)">
<a href="@item.Url">@item.Name</a> <a href="@item.Url">@item.Name</a>
</li> </li>
} }
</ul> </ul>
@@ -1,104 +1,104 @@
@inherits Umbraco.Web.Macros.PartialViewMacroPage @inherits Umbraco.Web.Macros.PartialViewMacroPage
@using System.Web.Mvc.Html @using System.Web.Mvc.Html
@using ClientDependency.Core.Mvc @using ClientDependency.Core.Mvc
@using Umbraco.Web @using Umbraco.Web
@using Umbraco.Web.Controllers @using Umbraco.Web.Controllers
@{ @{
@* @*
You can specify a custom member type alias in the constructor, the default is 'Member' You can specify a custom member type alias in the constructor, the default is 'Member'
for example, to use 'Custom Member' you'd use this syntax: for example, to use 'Custom Member' you'd use this syntax:
var registerModel = Members.CreateRegistrationModel("Custom Member"); var registerModel = Members.CreateRegistrationModel("Custom Member");
*@ *@
var registerModel = Members.CreateRegistrationModel(); var registerModel = Members.CreateRegistrationModel();
@* @*
Configurable here: Configurable here:
registerModel.RedirectUrl - Optional. What path to redirect to if registration is successful. registerModel.RedirectUrl - Optional. What path to redirect to if registration is successful.
By default the member will be redirected to the current umbraco page By default the member will be redirected to the current umbraco page
unless this is specified. unless this is specified.
registerModel.UsernameIsEmail - the default is true registerModel.UsernameIsEmail - the default is true
if you want the username to be different from the email if you want the username to be different from the email
address, set this to true and add a new Username field in address, set this to true and add a new Username field in
the form below the form below
@Html.LabelFor(m => registerModel.Username) @Html.LabelFor(m => registerModel.Username)
@Html.TextBoxFor(m => registerModel.Username) @Html.TextBoxFor(m => registerModel.Username)
@Html.ValidationMessageFor(m => registerModel.Username) @Html.ValidationMessageFor(m => registerModel.Username)
*@ *@
Html.EnableClientValidation(); Html.EnableClientValidation();
Html.EnableUnobtrusiveJavaScript(); Html.EnableUnobtrusiveJavaScript();
Html.RequiresJs("/umbraco_client/ui/jquery.js"); Html.RequiresJs("/umbraco_client/ui/jquery.js");
Html.RequiresJs("/umbraco_client/Application/JQuery/jquery.validate.min.js"); Html.RequiresJs("/umbraco_client/Application/JQuery/jquery.validate.min.js");
Html.RequiresJs("/umbraco_client/Application/JQuery/jquery.validate.unobtrusive.min.js"); Html.RequiresJs("/umbraco_client/Application/JQuery/jquery.validate.unobtrusive.min.js");
var success = TempData["FormSuccess"] != null; var success = TempData["FormSuccess"] != null;
} }
@*NOTE: This RenderJsHere code should be put on your main template page where the rest of your script tags are placed*@ @*NOTE: This RenderJsHere code should be put on your main template page where the rest of your script tags are placed*@
@Html.RenderJsHere() @Html.RenderJsHere()
@if (success) @if (success)
{ {
@* This message will show if RedirectOnSucces is set to false (default) *@ @* This message will show if RedirectOnSucces is set to false (default) *@
<p>Registration succeeeded.</p> <p>Registration succeeeded.</p>
} }
else else
{ {
using (Html.BeginUmbracoForm<UmbRegisterController>("HandleRegisterMember")) using (Html.BeginUmbracoForm<UmbRegisterController>("HandleRegisterMember"))
{ {
<fieldset> <fieldset>
<legend>Register Member</legend> <legend>Register Member</legend>
@Html.ValidationSummary("registerModel", true) @Html.ValidationSummary("registerModel", true)
@Html.LabelFor(m => registerModel.Name) @Html.LabelFor(m => registerModel.Name)
@Html.TextBoxFor(m => registerModel.Name) @Html.TextBoxFor(m => registerModel.Name)
@Html.ValidationMessageFor(m => registerModel.Name) @Html.ValidationMessageFor(m => registerModel.Name)
<br /> <br />
@Html.LabelFor(m => registerModel.Email) @Html.LabelFor(m => registerModel.Email)
@Html.TextBoxFor(m => registerModel.Email) @Html.TextBoxFor(m => registerModel.Email)
@Html.ValidationMessageFor(m => registerModel.Email) @Html.ValidationMessageFor(m => registerModel.Email)
<br /> <br />
@Html.LabelFor(m => registerModel.Password) @Html.LabelFor(m => registerModel.Password)
@Html.PasswordFor(m => registerModel.Password) @Html.PasswordFor(m => registerModel.Password)
@Html.ValidationMessageFor(m => registerModel.Password) @Html.ValidationMessageFor(m => registerModel.Password)
<br /> <br />
@if (registerModel.MemberProperties != null) @if (registerModel.MemberProperties != null)
{ {
@* @*
It will only displays properties marked as "Member can edit" on the "Info" tab of the Member Type. It will only displays properties marked as "Member can edit" on the "Info" tab of the Member Type.
*@ *@
for (var i = 0; i < registerModel.MemberProperties.Count; i++) for (var i = 0; i < registerModel.MemberProperties.Count; i++)
{ {
@Html.LabelFor(m => registerModel.MemberProperties[i].Value, registerModel.MemberProperties[i].Name) @Html.LabelFor(m => registerModel.MemberProperties[i].Value, registerModel.MemberProperties[i].Name)
@* @*
By default this will render a textbox but if you want to change the editor template for this property you can By default this will render a textbox but if you want to change the editor template for this property you can
easily change it. For example, if you wanted to render a custom editor for this field called "MyEditor" you would easily change it. For example, if you wanted to render a custom editor for this field called "MyEditor" you would
create a file at ~/Views/Shared/EditorTemplates/MyEditor.cshtml", then you will change the next line of code to create a file at ~/Views/Shared/EditorTemplates/MyEditor.cshtml", then you will change the next line of code to
render your specific editor template like: render your specific editor template like:
@Html.EditorFor(m => profileModel.MemberProperties[i].Value, "MyEditor") @Html.EditorFor(m => profileModel.MemberProperties[i].Value, "MyEditor")
*@ *@
@Html.EditorFor(m => registerModel.MemberProperties[i].Value) @Html.EditorFor(m => registerModel.MemberProperties[i].Value)
@Html.HiddenFor(m => registerModel.MemberProperties[i].Alias) @Html.HiddenFor(m => registerModel.MemberProperties[i].Alias)
<br /> <br />
} }
} }
@Html.HiddenFor(m => registerModel.MemberTypeAlias) @Html.HiddenFor(m => registerModel.MemberTypeAlias)
@Html.HiddenFor(m => registerModel.RedirectUrl) @Html.HiddenFor(m => registerModel.RedirectUrl)
@Html.HiddenFor(m => registerModel.UsernameIsEmail) @Html.HiddenFor(m => registerModel.UsernameIsEmail)
<button>Register</button> <button>Register</button>
</fieldset> </fieldset>
} }
} }
@@ -1,42 +1,42 @@
@inherits Umbraco.Web.Macros.PartialViewMacroPage @inherits Umbraco.Web.Macros.PartialViewMacroPage
@* @*
This snippet makes a list of links of all visible pages of the site, as nested unordered html lists. This snippet makes a list of links of all visible pages of the site, as nested unordered html lists.
How it works: How it works:
- It uses a custom Razor helper called Traverse() to select and display the markup and links. - It uses a custom Razor helper called Traverse() to select and display the markup and links.
*@ *@
@{ var selection = CurrentPage.Site(); } @{ var selection = CurrentPage.Site(); }
<div class="sitemap"> <div class="sitemap">
@* Render the sitemap by passing the root node to the traverse helper, below *@ @* Render the sitemap by passing the root node to the traverse helper, below *@
@Traverse(selection) @Traverse(selection)
</div> </div>
@* Helper method to travers through all descendants *@ @* Helper method to travers through all descendants *@
@helper Traverse(dynamic node) @helper Traverse(dynamic node)
{ {
@* Update the level to reflect how deep you want the sitemap to go *@ @* Update the level to reflect how deep you want the sitemap to go *@
var maxLevelForSitemap = 4; var maxLevelForSitemap = 4;
@* Select visible children *@ @* Select visible children *@
var selection = node.Children.Where("Visible").Where("Level <= " + maxLevelForSitemap); var selection = node.Children.Where("Visible").Where("Level <= " + maxLevelForSitemap);
@* If any items are returned, render a list *@ @* If any items are returned, render a list *@
if (selection.Any()) if (selection.Any())
{ {
<ul> <ul>
@foreach (var item in selection) @foreach (var item in selection)
{ {
<li class="level-@item.Level"> <li class="level-@item.Level">
<a href="@item.Url">@item.Name</a> <a href="@item.Url">@item.Name</a>
@* Run the traverse helper again for any child pages *@ @* Run the traverse helper again for any child pages *@
@Traverse(item) @Traverse(item)
</li> </li>
} }
</ul> </ul>
} }
} }
+98 -98
View File
@@ -1,98 +1,98 @@
@using System.Collections @using System.Collections
@using System.Net.Http @using System.Net.Http
@using System.Web.Mvc.Html @using System.Web.Mvc.Html
@using Umbraco.Core @using Umbraco.Core
@using ClientDependency.Core @using ClientDependency.Core
@using ClientDependency.Core.Mvc @using ClientDependency.Core.Mvc
@using Microsoft.Owin.Security @using Microsoft.Owin.Security
@using Newtonsoft.Json @using Newtonsoft.Json
@using Newtonsoft.Json.Linq @using Newtonsoft.Json.Linq
@using Umbraco.Core.IO @using Umbraco.Core.IO
@using Umbraco.Web @using Umbraco.Web
@using Umbraco.Web.Editors @using Umbraco.Web.Editors
@using umbraco @using umbraco
@inherits System.Web.Mvc.WebViewPage @inherits System.Web.Mvc.WebViewPage
@{ @{
var isDebug = false; var isDebug = false;
if (Request.RawUrl.IndexOf('?') >= 0) if (Request.RawUrl.IndexOf('?') >= 0)
{ {
var parsed = HttpUtility.ParseQueryString(Request.RawUrl.Split('?')[1]); var parsed = HttpUtility.ParseQueryString(Request.RawUrl.Split('?')[1]);
var attempt = parsed["umbDebug"].TryConvertTo<bool>(); var attempt = parsed["umbDebug"].TryConvertTo<bool>();
if (attempt && attempt.Result) if (attempt && attempt.Result)
{ {
isDebug = true; isDebug = true;
} }
} }
Html Html
.RequiresCss("assets/css/umbraco.css", "Umbraco") .RequiresCss("assets/css/umbraco.css", "Umbraco")
.RequiresCss("tree/treeicons.css", "UmbracoClient") .RequiresCss("tree/treeicons.css", "UmbracoClient")
.RequiresCss("lib/bootstrap-social/bootstrap-social.css", "Umbraco") .RequiresCss("lib/bootstrap-social/bootstrap-social.css", "Umbraco")
.RequiresCss("lib/font-awesome/css/font-awesome.min.css", "Umbraco"); .RequiresCss("lib/font-awesome/css/font-awesome.min.css", "Umbraco");
} }
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<base href="@GlobalSettings.Path.EnsureEndsWith('/')" /> <base href="@GlobalSettings.Path.EnsureEndsWith('/')" />
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="apple-mobile-web-app-capable" content="yes"> <meta name="apple-mobile-web-app-capable" content="yes">
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="robots" content="noindex, nofollow"> <meta name="robots" content="noindex, nofollow">
<title ng-bind="$root.locationTitle">Umbraco</title> <title ng-bind="$root.locationTitle">Umbraco</title>
@Html.RenderCssHere( @Html.RenderCssHere(
new BasicPath("Umbraco", IOHelper.ResolveUrl(SystemDirectories.Umbraco)), new BasicPath("Umbraco", IOHelper.ResolveUrl(SystemDirectories.Umbraco)),
new BasicPath("UmbracoClient", IOHelper.ResolveUrl(SystemDirectories.UmbracoClient))) new BasicPath("UmbracoClient", IOHelper.ResolveUrl(SystemDirectories.UmbracoClient)))
</head> </head>
<noscript><h5><strong>&nbsp; JavaScript is disabled. Please enable to continue!</strong></h5></noscript> <noscript><h5><strong>&nbsp; JavaScript is disabled. Please enable to continue!</strong></h5></noscript>
<body ng-class="{touch:touchDevice,emptySection:emptySection}" ng-controller="Umbraco.MainController" id="umbracoMainPageBody"> <body ng-class="{touch:touchDevice,emptySection:emptySection}" ng-controller="Umbraco.MainController" id="umbracoMainPageBody">
<div ng-hide="!authenticated" ng-cloak id="mainwrapper" class="clearfix" ng-click="closeDialogs($event)"> <div ng-hide="!authenticated" ng-cloak id="mainwrapper" class="clearfix" ng-click="closeDialogs($event)">
<umb-navigation></umb-navigation> <umb-navigation></umb-navigation>
<section id="contentwrapper"> <section id="contentwrapper">
<div id="contentcolumn" ng-view> <div id="contentcolumn" ng-view>
</div> </div>
</section> </section>
<umb-notifications></umb-notifications> <umb-notifications></umb-notifications>
</div> </div>
@Html.BareMinimumServerVariablesScript(Url, Url.Action("ExternalLogin", "BackOffice", new { area = ViewBag.UmbracoPath })) @Html.BareMinimumServerVariablesScript(Url, Url.Action("ExternalLogin", "BackOffice", new { area = ViewBag.UmbracoPath }))
<script type="text/javascript"> <script type="text/javascript">
document.angularReady = function(app) { document.angularReady = function(app) {
@Html.AngularValueExternalLoginInfoScript((IEnumerable<string>)ViewBag.ExternalSignInError) @Html.AngularValueExternalLoginInfoScript((IEnumerable<string>)ViewBag.ExternalSignInError)
@Html.AngularValueResetPasswordCodeInfoScript(ViewData["PasswordResetCode"]) @Html.AngularValueResetPasswordCodeInfoScript(ViewData["PasswordResetCode"])
} }
</script> </script>
@*And finally we can load in our angular app*@ @*And finally we can load in our angular app*@
<script type="text/javascript" src="lib/rgrove-lazyload/lazyload.js"></script> <script type="text/javascript" src="lib/rgrove-lazyload/lazyload.js"></script>
<script type="text/javascript" src="@Url.GetUrlWithCacheBust("Application", "BackOffice")"></script> <script type="text/javascript" src="@Url.GetUrlWithCacheBust("Application", "BackOffice")"></script>
@if (isDebug) @if (isDebug)
{ {
@Html.RenderProfiler() @Html.RenderProfiler()
} }
<umb-overlay <umb-overlay
ng-if="ysodOverlay.show" ng-if="ysodOverlay.show"
model="ysodOverlay" model="ysodOverlay"
position="right" position="right"
view="ysodOverlay.view"> view="ysodOverlay.view">
</umb-overlay> </umb-overlay>
</body> </body>
</html> </html>
@@ -1,51 +1,51 @@
<div ng-controller="Umbraco.DashboardController"> <div ng-controller="Umbraco.DashboardController">
<umb-load-indicator ng-if="page.loading"></umb-load-indicator> <umb-load-indicator ng-if="page.loading"></umb-load-indicator>
<form <form
ng-show="!page.loading" ng-show="!page.loading"
class="umb-dashboard" class="umb-dashboard"
val-form-manager> val-form-manager>
<umb-editor-view <umb-editor-view
footer="false" footer="false"
umb-tabs> umb-tabs>
<umb-editor-header <umb-editor-header
name="dashboard.name" name="dashboard.name"
name-locked="page.nameLocked" name-locked="page.nameLocked"
tabs="dashboard.tabs" tabs="dashboard.tabs"
hide-icon="true" hide-icon="true"
hide-description="true" hide-description="true"
hide-alias="true"> hide-alias="true">
</umb-editor-header> </umb-editor-header>
<umb-editor-container> <umb-editor-container>
<umb-tabs-content view="true"> <umb-tabs-content view="true">
<umb-tab id="tab{{tab.id}}" ng-repeat="tab in dashboard.tabs" rel="{{tab.id}}"> <umb-tab id="tab{{tab.id}}" ng-repeat="tab in dashboard.tabs" rel="{{tab.id}}">
<div ng-repeat="property in tab.properties" ng-switch on="property.serverSide"> <div ng-repeat="property in tab.properties" ng-switch on="property.serverSide">
<div class="span12 clearfix" ng-switch-when="false"> <div class="span12 clearfix" ng-switch-when="false">
<h3 ng-show="property.caption">{{property.caption}}</h3> <h3 ng-show="property.caption">{{property.caption}}</h3>
<div ng-include="property.path"></div> <div ng-include="property.path"></div>
</div> </div>
<div class="span12 umb-dashboard-control clearfix" ng-switch-when="true"> <div class="span12 umb-dashboard-control clearfix" ng-switch-when="true">
<h3 ng-show="property.caption">{{property.caption}}</h3> <h3 ng-show="property.caption">{{property.caption}}</h3>
<iframe ng-src="dashboard/usercontrolproxy.aspx?ctrl={{ property.path}}"></iframe> <iframe ng-src="dashboard/usercontrolproxy.aspx?ctrl={{ property.path}}"></iframe>
</div> </div>
</div> </div>
</umb-tab> </umb-tab>
</umb-tabs-content> </umb-tabs-content>
</umb-editor-container> </umb-editor-container>
</umb-editor-view> </umb-editor-view>
</form> </form>
</div> </div>
@@ -1,50 +1,50 @@
<form novalidate name="insertMacroForm" ng-submit="submitForm()" ng-controller="Umbraco.Dialogs.InsertMacroController" val-form-manager> <form novalidate name="insertMacroForm" ng-submit="submitForm()" ng-controller="Umbraco.Dialogs.InsertMacroController" val-form-manager>
<div class="umb-panel"> <div class="umb-panel">
<div class="umb-panel-footer"> <div class="umb-panel-footer">
<div class="btn-toolbar umb-btn-toolbar pull-right"> <div class="btn-toolbar umb-btn-toolbar pull-right">
<a href class="btn btn-link" ng-click="close()"> <a href class="btn btn-link" ng-click="close()">
<localize key="cancel" /> <localize key="cancel" />
</a> </a>
<button type="submit" class="btn btn-primary"> <button type="submit" class="btn btn-primary">
<localize key="buttons_select"/> <localize key="buttons_select"/>
</button> </button>
</div> </div>
</div> </div>
<div class="umb-panel-body no-header umb-scrollable" auto-scale="90" ng-switch="wizardStep"> <div class="umb-panel-body no-header umb-scrollable" auto-scale="90" ng-switch="wizardStep">
<umb-control-group label="Choose a macro" ng-switch-when="macroSelect"> <umb-control-group label="Choose a macro" ng-switch-when="macroSelect">
<select class="umb-editor" ng-change="submitForm()" <select class="umb-editor" ng-change="submitForm()"
name="selectedMacro" name="selectedMacro"
ng-model="$parent.$parent.selectedMacro" ng-model="$parent.$parent.selectedMacro"
ng-options="m as m.name for m in macros" ng-options="m as m.name for m in macros"
required> required>
<option value=""><localize key="choose" />...</option> <option value=""><localize key="choose" />...</option>
</select> </select>
<span class="help-inline" val-msg-for="selectedMacro" val-toggle-msg="required"><localize key="required" /></span> <span class="help-inline" val-msg-for="selectedMacro" val-toggle-msg="required"><localize key="required" /></span>
</umb-control-group> </umb-control-group>
<div class="umb-pane" ng-switch-when="paramSelect"> <div class="umb-pane" ng-switch-when="paramSelect">
<h5>{{$parent.$parent.selectedMacro.name}}</h5> <h5>{{$parent.$parent.selectedMacro.name}}</h5>
<ul class="unstyled"> <ul class="unstyled">
<li ng-repeat="param in $parent.macroParams"> <li ng-repeat="param in $parent.macroParams">
<ng-form name="parameterForm"> <ng-form name="parameterForm">
<umb-control-group label="{{param.name}}"> <umb-control-group label="{{param.name}}">
<umb-editor model="param"></umb-editor> <umb-editor model="param"></umb-editor>
</umb-control-group> </umb-control-group>
</ng-form> </ng-form>
</li> </li>
</ul> </ul>
</div> </div>
</div> </div>
</div> </div>
</form> </form>
@@ -1,14 +1,14 @@
<div class="umb-dialog" ng-controller="Umbraco.Dialogs.LegacyDeleteController"> <div class="umb-dialog" ng-controller="Umbraco.Dialogs.LegacyDeleteController">
<div class="umb-dialog-body" > <div class="umb-dialog-body" >
<div class="umb-pane"> <div class="umb-pane">
<p> <p>
Are you sure you want to delete <strong>{{currentNode.name}}</strong> ? Are you sure you want to delete <strong>{{currentNode.name}}</strong> ?
</p> </p>
<umb-confirm on-confirm="performDelete" on-cancel="cancel"> <umb-confirm on-confirm="performDelete" on-cancel="cancel">
</umb-confirm> </umb-confirm>
</div> </div>
</div> </div>
</div> </div>
@@ -1,76 +1,76 @@
<div class="umb-panel" ng-controller="Umbraco.Dialogs.LinkPickerController"> <div class="umb-panel" ng-controller="Umbraco.Dialogs.LinkPickerController">
<div class="umb-panel-body no-header with-footer compact"> <div class="umb-panel-body no-header with-footer compact">
<umb-pane> <umb-pane>
<umb-control-group label="@content_urls"> <umb-control-group label="@content_urls">
<input type="text" <input type="text"
localize="placeholder" localize="placeholder"
placeholder="@general_url" placeholder="@general_url"
class="umb-editor umb-textstring" class="umb-editor umb-textstring"
ng-model="target.url" ng-model="target.url"
ng-disabled="target.id" ng-disabled="target.id"
/> />
</umb-control-group> </umb-control-group>
<umb-control-group label="@content_nodeName"> <umb-control-group label="@content_nodeName">
<input type="text" <input type="text"
localize="placeholder" localize="placeholder"
placeholder="@placeholders_entername" placeholder="@placeholders_entername"
class="umb-editor umb-textstring" class="umb-editor umb-textstring"
ng-model="target.name" /> ng-model="target.name" />
</umb-control-group> </umb-control-group>
<umb-control-group label="@content_target"> <umb-control-group label="@content_target">
<select class="umb-editor umb-dropdown" ng-model="target.target"> <select class="umb-editor umb-dropdown" ng-model="target.target">
<option value=""></option> <option value=""></option>
<option value="_blank">Opens the linked document in a new window or tab</option> <option value="_blank">Opens the linked document in a new window or tab</option>
<option value="_top">Opens the linked document in the full body of the window</option> <option value="_top">Opens the linked document in the full body of the window</option>
<option value="_parent">Opens the linked document in the parent frame</option> <option value="_parent">Opens the linked document in the parent frame</option>
</select> </select>
</umb-control-group> </umb-control-group>
</umb-pane> </umb-pane>
<umb-tree-search-box hide-search-callback="hideSearch" <umb-tree-search-box hide-search-callback="hideSearch"
search-callback="onSearchResults" search-callback="onSearchResults"
search-from-id="{{searchInfo.searchFromId}}" search-from-id="{{searchInfo.searchFromId}}"
search-from-name="{{searchInfo.searchFromName}}" search-from-name="{{searchInfo.searchFromName}}"
show-search="{{searchInfo.showSearch}}" show-search="{{searchInfo.showSearch}}"
section="{{section}}"> section="{{section}}">
</umb-tree-search-box> </umb-tree-search-box>
<br/> <br/>
<umb-tree-search-results ng-if="searchInfo.showSearch" <umb-tree-search-results ng-if="searchInfo.showSearch"
results="searchInfo.results" results="searchInfo.results"
select-result-callback="selectResult"> select-result-callback="selectResult">
</umb-tree-search-results> </umb-tree-search-results>
<div ng-hide="searchInfo.showSearch"> <div ng-hide="searchInfo.showSearch">
<umb-tree section="content" <umb-tree section="content"
hideheader="true" hideheader="true"
hideoptions="true" hideoptions="true"
eventhandler="dialogTreeEventHandler" eventhandler="dialogTreeEventHandler"
isdialog="true" isdialog="true"
enablecheckboxes="true"> enablecheckboxes="true">
</umb-tree> </umb-tree>
</div> </div>
</div> </div>
<div class="umb-panel-footer"> <div class="umb-panel-footer">
<div class="umb-el-wrap umb-panel-buttons"> <div class="umb-el-wrap umb-panel-buttons">
<div class="btn-toolbar umb-btn-toolbar pull-right"> <div class="btn-toolbar umb-btn-toolbar pull-right">
<a href ng-click="close()" class="btn btn-link"> <a href ng-click="close()" class="btn btn-link">
<localize key="general_cancel">Cancel</localize> <localize key="general_cancel">Cancel</localize>
</a> </a>
<a href ng-click="switchToMediaPicker()" class="btn">Link to file</a> <a href ng-click="switchToMediaPicker()" class="btn">Link to file</a>
<button <button
class="btn btn-primary" class="btn btn-primary"
ng-click="submit(target)"> ng-click="submit(target)">
<localize key="buttons_select">Select</localize> <localize key="buttons_select">Select</localize>
</button> </button>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
@@ -1,135 +1,135 @@
<div ng-controller="Umbraco.Dialogs.LoginController"> <div ng-controller="Umbraco.Dialogs.LoginController">
<div id="login" class="umb-modalcolumn umb-dialog" ng-class="{'show-validation': loginForm.$invalid}" ng-cloak konami-code="activateKonamiMode()"> <div id="login" class="umb-modalcolumn umb-dialog" ng-class="{'show-validation': loginForm.$invalid}" ng-cloak konami-code="activateKonamiMode()">
<div class="form"> <div class="form">
<h1>{{greeting}}</h1> <h1>{{greeting}}</h1>
<div ng-show="view == 'login'"> <div ng-show="view == 'login'">
<p> <p>
<span ng-show="dialogData.isTimedOut"><localize key="login_timeout">Log in below</localize>.</span> <span ng-show="dialogData.isTimedOut"><localize key="login_timeout">Log in below</localize>.</span>
<localize key="login_instruction">Log in below</localize> <localize key="login_instruction">Log in below</localize>
</p> </p>
<div class="external-logins" ng-if="externalLoginProviders.length > 0"> <div class="external-logins" ng-if="externalLoginProviders.length > 0">
<div class="text-error" ng-repeat="error in externalLoginInfo.errors"> <div class="text-error" ng-repeat="error in externalLoginInfo.errors">
<span>{{error}}</span> <span>{{error}}</span>
</div> </div>
<form method="POST" name="externalLoginForm" action="{{externalLoginFormAction}}"> <form method="POST" name="externalLoginForm" action="{{externalLoginFormAction}}">
<div ng-repeat="login in externalLoginProviders"> <div ng-repeat="login in externalLoginProviders">
<button type="submit" class="btn btn-block btn-social" <button type="submit" class="btn btn-block btn-social"
ng-class="login.properties.SocialStyle" ng-class="login.properties.SocialStyle"
id="{{login.authType}}" name="provider" value="{{login.authType}}" id="{{login.authType}}" name="provider" value="{{login.authType}}"
title="Log in using your {{login.caption}} account"> title="Log in using your {{login.caption}} account">
<i class="fa" ng-class="login.properties.SocialIcon"></i> <i class="fa" ng-class="login.properties.SocialIcon"></i>
<localize key="login_signInWith">Sign in with</localize> {{login.caption}} <localize key="login_signInWith">Sign in with</localize> {{login.caption}}
</button> </button>
</div> </div>
</form> </form>
<div id="hrOr"> <div id="hrOr">
<hr /> <hr />
<div><localize key="general_or">or</localize></div> <div><localize key="general_or">or</localize></div>
</div> </div>
</div> </div>
<form method="POST" name="loginForm" ng-submit="loginSubmit(login, password)"> <form method="POST" name="loginForm" ng-submit="loginSubmit(login, password)">
<div class="control-group" ng-class="{error: loginForm.username.$invalid}"> <div class="control-group" ng-class="{error: loginForm.username.$invalid}">
<input type="text" ng-model="login" name="username" class="input-xlarge" localize="placeholder" placeholder="@placeholders_username" /> <input type="text" ng-model="login" name="username" class="input-xlarge" localize="placeholder" placeholder="@placeholders_username" />
</div> </div>
<div class="control-group" ng-class="{error: loginForm.password.$invalid}"> <div class="control-group" ng-class="{error: loginForm.password.$invalid}">
<input type="password" ng-model="password" name="password" class="input-xlarge" localize="placeholder" placeholder="@placeholders_password" autocomplete="off" /> <input type="password" ng-model="password" name="password" class="input-xlarge" localize="placeholder" placeholder="@placeholders_password" autocomplete="off" />
</div> </div>
<div class="control-group" ng-show="loginForm.$invalid"> <div class="control-group" ng-show="loginForm.$invalid">
<div class="text-error">{{errorMsg}}</div> <div class="text-error">{{errorMsg}}</div>
</div> </div>
<button type="submit" class="btn" val-trigger-change="#login .form input"><localize key="general_login">Login</localize></button> <button type="submit" class="btn" val-trigger-change="#login .form input"><localize key="general_login">Login</localize></button>
<div class="switch-view" ng-show="allowPasswordReset"> <div class="switch-view" ng-show="allowPasswordReset">
<a class="muted" href="#" prevent-default ng-click="showRequestPasswordReset()"><localize key="login_forgottenPassword">Forgotten password?</localize></a> <a class="muted" href="#" prevent-default ng-click="showRequestPasswordReset()"><localize key="login_forgottenPassword">Forgotten password?</localize></a>
</div> </div>
</form> </form>
</div> </div>
<div ng-show="view == 'request-password-reset'"> <div ng-show="view == 'request-password-reset'">
<p> <p>
<localize key="login_forgottenPasswordInstruction">An email will be sent to the address specified with a link to reset your password</localize> <localize key="login_forgottenPasswordInstruction">An email will be sent to the address specified with a link to reset your password</localize>
</p> </p>
<form method="POST" name="requestPasswordResetForm" ng-submit="requestPasswordResetSubmit(email)"> <form method="POST" name="requestPasswordResetForm" ng-submit="requestPasswordResetSubmit(email)">
<div class="control-group" ng-class="{error: requestPasswordResetForm.email.$invalid}"> <div class="control-group" ng-class="{error: requestPasswordResetForm.email.$invalid}">
<input type="text" ng-model="email" name="email" class="input-xlarge" localize="placeholder" placeholder="@placeholders_email" /> <input type="text" ng-model="email" name="email" class="input-xlarge" localize="placeholder" placeholder="@placeholders_email" />
</div> </div>
<div class="control-group" ng-show="requestPasswordResetForm.$invalid"> <div class="control-group" ng-show="requestPasswordResetForm.$invalid">
<div class="text-error">{{errorMsg}}</div> <div class="text-error">{{errorMsg}}</div>
</div> </div>
<div class="control-group" ng-show="showEmailResetConfirmation"> <div class="control-group" ng-show="showEmailResetConfirmation">
<div class="text-info"> <div class="text-info">
<localize key="login_requestPasswordResetConfirmation">An email with password reset instructions will be sent to the specified address if it matched our records</localize> <localize key="login_requestPasswordResetConfirmation">An email with password reset instructions will be sent to the specified address if it matched our records</localize>
</div> </div>
</div> </div>
<button type="submit" class="btn" val-trigger-change="#login .form input"><localize key="general_submit">Submit</localize></button> <button type="submit" class="btn" val-trigger-change="#login .form input"><localize key="general_submit">Submit</localize></button>
<div class="switch-view"> <div class="switch-view">
<a class="muted" href="#" prevent-default ng-click="showLogin()"><localize key="login_returnToLogin">Return to login form</localize></a> <a class="muted" href="#" prevent-default ng-click="showLogin()"><localize key="login_returnToLogin">Return to login form</localize></a>
</div> </div>
</form> </form>
</div> </div>
<div ng-show="view == 'set-password'"> <div ng-show="view == 'set-password'">
<p ng-hide="resetComplete"> <p ng-hide="resetComplete">
<localize key="login_setPasswordInstruction">Please provide a new password.</localize> <localize key="login_setPasswordInstruction">Please provide a new password.</localize>
</p> </p>
<form method="POST" name="setPasswordForm" ng-submit="setPasswordSubmit(password, confirmPassword)"> <form method="POST" name="setPasswordForm" ng-submit="setPasswordSubmit(password, confirmPassword)">
<div ng-hide="resetComplete" class="control-group" ng-class="{error: setPasswordForm.password.$invalid}"> <div ng-hide="resetComplete" class="control-group" ng-class="{error: setPasswordForm.password.$invalid}">
<input type="password" ng-model="password" name="password" class="input-xlarge" localize="placeholder" placeholder="@placeholders_password" /> <input type="password" ng-model="password" name="password" class="input-xlarge" localize="placeholder" placeholder="@placeholders_password" />
</div> </div>
<div ng-hide="resetComplete" class="control-group" ng-class="{error: setPasswordForm.confirmPassword.$invalid}"> <div ng-hide="resetComplete" class="control-group" ng-class="{error: setPasswordForm.confirmPassword.$invalid}">
<input type="password" ng-model="confirmPassword" name="confirmPassword" class="input-xlarge" localize="placeholder" placeholder="@placeholders_confirmPassword" /> <input type="password" ng-model="confirmPassword" name="confirmPassword" class="input-xlarge" localize="placeholder" placeholder="@placeholders_confirmPassword" />
</div> </div>
<div ng-hide="resetComplete" class="control-group" ng-show="setPasswordForm.$invalid"> <div ng-hide="resetComplete" class="control-group" ng-show="setPasswordForm.$invalid">
<div class="text-error">{{errorMsg}}</div> <div class="text-error">{{errorMsg}}</div>
</div> </div>
<div class="control-group" ng-show="showSetPasswordConfirmation"> <div class="control-group" ng-show="showSetPasswordConfirmation">
<div class="text-info"> <div class="text-info">
<localize key="login_setPasswordConfirmation">Your new password has been set and you may now use it to log in.</localize> <localize key="login_setPasswordConfirmation">Your new password has been set and you may now use it to log in.</localize>
</div> </div>
</div> </div>
<button ng-hide="resetComplete" type="submit" class="btn" val-trigger-change="#login .form input"><localize key="general_submit">Submit</localize></button> <button ng-hide="resetComplete" type="submit" class="btn" val-trigger-change="#login .form input"><localize key="general_submit">Submit</localize></button>
<div class="switch-view"> <div class="switch-view">
<a class="muted" href="#" prevent-default ng-click="showLogin()"><localize key="login_returnToLogin">Return to login form</localize></a> <a class="muted" href="#" prevent-default ng-click="showLogin()"><localize key="login_returnToLogin">Return to login form</localize></a>
</div> </div>
</form> </form>
</div> </div>
<div ng-show="view == 'password-reset-code-expired'"> <div ng-show="view == 'password-reset-code-expired'">
<div class="text-error" ng-repeat="error in resetPasswordCodeInfo.errors"> <div class="text-error" ng-repeat="error in resetPasswordCodeInfo.errors">
<span>{{error}}</span> <span>{{error}}</span>
</div> </div>
<div class="switch-view"> <div class="switch-view">
<a class="muted" href="#" prevent-default ng-click="showLogin()"><localize key="login_returnToLogin">Return to login form</localize></a> <a class="muted" href="#" prevent-default ng-click="showLogin()"><localize key="login_returnToLogin">Return to login form</localize></a>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
@@ -1,38 +1,38 @@
<div class="umb-panel" ng-controller="Umbraco.Dialogs.MacroPickerController"> <div class="umb-panel" ng-controller="Umbraco.Dialogs.MacroPickerController">
<div class="umb-panel-body no-header with-footer umb-scrollable" ng-switch on="dialogMode"> <div class="umb-panel-body no-header with-footer umb-scrollable" ng-switch on="dialogMode">
<div class="umb-control-group"> <div class="umb-control-group">
<div ng-switch-when="list" ng-swicth-default class="tab-content form-horizontal umb-el-wrap"> <div ng-switch-when="list" ng-swicth-default class="tab-content form-horizontal umb-el-wrap">
<ul class="nav nav-tabs nav-stacked"> <ul class="nav nav-tabs nav-stacked">
<li ng-repeat="macro in macros"> <li ng-repeat="macro in macros">
<a href="#" ng-click="configureMacro(macro)" prevent-default> <a href="#" ng-click="configureMacro(macro)" prevent-default>
{{macro.name}} {{macro.name}}
</a> </a>
</li> </li>
</ul> </ul>
</div> </div>
<div ng-switch-when="configure" class="tab-content form umb-el-wrap"> <div ng-switch-when="configure" class="tab-content form umb-el-wrap">
<h5>{{dialogData.macro.name}}</h5> <h5>{{dialogData.macro.name}}</h5>
<div class="umb-pane" ng-repeat="model in dialogData.macro.properties"> <div class="umb-pane" ng-repeat="model in dialogData.macro.properties">
<label class="control-label" ng-hide="model.hideLabel" for="{{model.alias}}">{{model.label}} <label class="control-label" ng-hide="model.hideLabel" for="{{model.alias}}">{{model.label}}
</label> </label>
<div class="controls" <div class="controls"
ng-include="model.editorView"> ng-include="model.editorView">
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="umb-panel-footer"> <div class="umb-panel-footer">
<div class="umb-el-wrap umb-panel-buttons"> <div class="umb-el-wrap umb-panel-buttons">
<div class="btn-toolbar umb-btn-toolbar"> <div class="btn-toolbar umb-btn-toolbar">
<input type="button" ng-click="submit(dialogData)" class="btn btn-primary" value="select" /> <input type="button" ng-click="submit(dialogData)" class="btn btn-primary" value="select" />
</div> </div>
</div> </div>
</div> </div>
</div> </div>
@@ -1,159 +1,161 @@
<form ng-controller="Umbraco.Dialogs.MediaPickerController" id="fileupload" <form ng-controller="Umbraco.Dialogs.MediaPickerController" id="fileupload"
method="POST" method="POST"
enctype="multipart/form-data" enctype="multipart/form-data"
umb-image-upload="options"> umb-image-upload="options">
<div class="umb-panel umb-dialogs-mediapicker" ng-if="target"> <div class="umb-panel umb-dialogs-mediapicker" ng-if="target">
<div class="umb-panel-body no-header with-footer compact"> <div class="umb-panel-body no-header with-footer compact">
<umb-pane> <umb-pane>
<umb-control-group ng-if="target.url"> <umb-control-group ng-if="target.url">
<div class="clearfix"> <div class="clearfix">
<umb-image-gravity src="target.url" <umb-image-gravity src="target.url"
center="target.focalPoint" /> center="target.focalPoint" />
</div> </div>
<div ng-if="cropSize"> <div ng-if="cropSize">
<h5>Preview</h5> <h5>Preview</h5>
<umb-image-thumbnail center="target.focalPoint" <umb-image-thumbnail center="target.focalPoint"
src="target.url" src="target.url"
height="{{cropSize.height}}" height="{{cropSize.height}}"
width="{{cropSize.width}}" width="{{cropSize.width}}"
max-size="400" /> max-size="400" />
</div> </div>
</umb-control-group> </umb-control-group>
<umb-control-group label="@general_url"> <umb-control-group label="@general_url">
<input type="text" <input type="text"
localize="placeholder" localize="placeholder"
placeholder="@general_url" placeholder="@general_url"
class="umb-editor umb-textstring" class="umb-editor umb-textstring"
ng-model="target.url" ng-model="target.url"
ng-disabled="target.id" /> ng-disabled="target.id" />
</umb-control-group> </umb-control-group>
<umb-control-group label="@content_altTextOptional"> <umb-control-group label="@content_altTextOptional">
<input type="text" <input type="text"
class="umb-editor umb-textstring" class="umb-editor umb-textstring"
ng-model="target.altText" /> ng-model="target.altText" />
</umb-control-group> </umb-control-group>
</umb-pane> </umb-pane>
</div> </div>
<div class="umb-panel-footer"> <div class="umb-panel-footer">
<div class="umb-el-wrap umb-panel-buttons"> <div class="umb-el-wrap umb-panel-buttons">
<div class="btn-toolbar umb-btn-toolbar pull-right"> <div class="btn-toolbar umb-btn-toolbar pull-right">
<a href ng-click="exitDetails()" class="btn btn-link"> <a href ng-click="exitDetails()" class="btn btn-link">
<localize key="general_cancel">Cancel</localize> <localize key="general_cancel">Cancel</localize>
</a> </a>
<button class="btn btn-primary" <button class="btn btn-primary"
ng-click="submit(target)"> ng-click="submit(target)">
<localize key="general_insert">Insert</localize> <localize key="general_insert">Insert</localize>
</button> </button>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="umb-panel umb-dialogs-mediapicker browser" <div class="umb-panel umb-dialogs-mediapicker browser"
on-drag-leave="dragLeave()" on-drag-leave="dragLeave()"
on-drag-end="dragLeave()" on-drag-end="dragLeave()"
on-drag-enter="dragEnter()" on-drag-enter="dragEnter()"
ng-hide="target"> ng-hide="target">
<div class="umb-panel-header"> <div class="umb-panel-header">
<div class="umb-el-wrap umb-panel-buttons umb-mediapicker-upload"> <div class="umb-el-wrap umb-panel-buttons umb-mediapicker-upload">
<div class="form-search"> <div class="form-search">
<i class="icon-search"></i> <i class="icon-search"></i>
<input type="text" <input type="text"
ng-model="searchTerm" ng-model="searchTerm"
class="umb-search-field search-query" class="umb-search-field search-query"
placeholder="Filter..."> placeholder="Filter...">
</div> </div>
<div class="upload-button"> <div class="upload-button">
<button class="btn fileinput-button" ng-click="upload()" ng-class="{disabled: disabled}"> <button class="btn fileinput-button" ng-click="upload()" ng-class="{disabled: disabled}">
<i class="icon-page-up"></i> <i class="icon-page-up"></i>
<localize key="general_upload">Upload</localize> <localize key="general_upload">Upload</localize>
</button> </button>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<ul class="breadcrumb span12"> <ul class="breadcrumb span12">
<li ng-hide="startNodeId != -1"> <li ng-hide="startNodeId != -1">
<a href ng-click="gotoFolder()" prevent-default>Media</a> / <a href ng-click="gotoFolder()" prevent-default>Media</a> /
</li> </li>
<li ng-repeat="item in path"> <li ng-repeat="item in path">
<a href ng-click="gotoFolder(item)" prevent-default>{{item.name}}</a> / <a href ng-click="gotoFolder(item)" prevent-default>{{item.name}}</a> /
</li> </li>
<li> <li>
<a href ng-hide="showFolderInput" ng-click="showFolderInput = true"> <a href ng-hide="showFolderInput" ng-click="showFolderInput = true">
<i class="icon icon-add small"></i> <i class="icon icon-add small"></i>
</a> </a>
<input type="text" <input type="text"
class="input-foldername input-mini inline" class="input-foldername input-mini inline"
ng-show="showFolderInput" ng-show="showFolderInput"
ng-model="newFolderName" ng-model="newFolderName"
ng-keydown="submitFolder($event)" ng-keydown="submitFolder($event)"
on-blur="showFolderInput = false" on-blur="showFolderInput = false"
focus-when="{{showFolderInput}}"> focus-when="{{showFolderInput}}">
</li> </li>
</ul> </ul>
</div> </div>
</div> </div>
<div class="umb-panel-body with-footer"> <div class="umb-panel-body with-footer">
<umb-file-dropzone <umb-file-dropzone
hide-dropzone="{{!activeDrag && images.length > 0}}" ng-if="acceptedMediatypes.length > 0"
parent-id="{{currentFolder.id}}" accepted-mediatypes="acceptedMediatypes"
files-uploaded="onUploadComplete" hide-dropzone="{{!activeDrag && images.length > 0}}"
files-queued="onFilesQueue"> parent-id="{{currentFolder.id}}"
</umb-file-dropzone> files-uploaded="onUploadComplete"
files-queued="onFilesQueue">
<umb-photo-folder </umb-file-dropzone>
min-height="105"
min-width="150" <umb-photo-folder
max-height="250" min-height="105"
ideal-items-per-row="3" min-width="150"
on-click="clickHandler" max-height="250"
ng-model="images" ideal-items-per-row="3"
images-only="{{onlyImages}}" on-click="clickHandler"
filter-by="searchTerm" /> ng-model="images"
</div> images-only="{{onlyImages}}"
filter-by="searchTerm" />
</div>
<div class="umb-panel-footer">
<div class="umb-el-wrap umb-panel-buttons">
<div class="btn-toolbar umb-btn-toolbar pull-right"> <div class="umb-panel-footer">
<div class="umb-el-wrap umb-panel-buttons">
<a href ng-click="close()" class="btn btn-link"> <div class="btn-toolbar umb-btn-toolbar pull-right">
<localize key="general_cancel">Cancel</localize>
</a> <a href ng-click="close()" class="btn btn-link">
<localize key="general_cancel">Cancel</localize>
<button class="btn btn-primary" </a>
ng-show="multiPicker"
ng-click="submit(dialogData.selection)"> <button class="btn btn-primary"
<localize key="buttons_select">Select</localize>({{dialogData.selection.length}}) ng-show="multiPicker"
</button> ng-click="submit(dialogData.selection)">
<localize key="buttons_select">Select</localize>({{dialogData.selection.length}})
</div> </button>
</div>
</div> </div>
</div>
</div> </div>
</div> </div>
</div>
@@ -1,34 +1,34 @@
<div class="umb-panel" ng-controller="Umbraco.Dialogs.MemberGroupPickerController"> <div class="umb-panel" ng-controller="Umbraco.Dialogs.MemberGroupPickerController">
<div class="umb-panel-body with-footer no-header"> <div class="umb-panel-body with-footer no-header">
<div> <div>
<umb-tree section="member" <umb-tree section="member"
treealias="memberGroups" treealias="memberGroups"
hideheader="true" hideheader="true"
hideoptions="true" hideoptions="true"
isdialog="true" isdialog="true"
eventhandler="dialogTreeEventHandler" eventhandler="dialogTreeEventHandler"
enablecheckboxes="{{multiPicker}}"> enablecheckboxes="{{multiPicker}}">
</umb-tree> </umb-tree>
</div> </div>
</div> </div>
<div class="umb-panel-footer" > <div class="umb-panel-footer" >
<div class="umb-el-wrap umb-panel-buttons"> <div class="umb-el-wrap umb-panel-buttons">
<div class="btn-toolbar umb-btn-toolbar pull-right"> <div class="btn-toolbar umb-btn-toolbar pull-right">
<a href ng-click="close()" class="btn btn-link"> <a href ng-click="close()" class="btn btn-link">
<localize key="general_cancel">Cancel</localize> <localize key="general_cancel">Cancel</localize>
</a> </a>
<button class="btn btn-primary" <button class="btn btn-primary"
ng-click="submit(dialogData.selection)"> ng-click="submit(dialogData.selection)">
<localize key="buttons_select">Select</localize> <localize key="buttons_select">Select</localize>
({{dialogData.selection.length}}) ({{dialogData.selection.length}})
</button> </button>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
@@ -1,36 +1,36 @@
<form ng-controller="Umbraco.Dialogs.RteEmbedController" val-form-manager> <form ng-controller="Umbraco.Dialogs.RteEmbedController" val-form-manager>
<div class="umb-panel"> <div class="umb-panel">
<div class="umb-panel-body no-header with-footer"> <div class="umb-panel-body no-header with-footer">
<umb-pane> <umb-pane>
<umb-control-group label="Url"> <umb-control-group label="Url">
<input id="url" class="umb-editor input-block-level" type="text" ng-model="form.url" ng-keyup="$event.keyCode == 13 ? showPreview() : null" required /> <input id="url" class="umb-editor input-block-level" type="text" ng-model="form.url" ng-keyup="$event.keyCode == 13 ? showPreview() : null" required />
<input type="button" ng-click="showPreview()" class="btn" value="Retrieve" /> <input type="button" ng-click="showPreview()" class="btn" value="Retrieve" />
</umb-control-group> </umb-control-group>
<div ng-show="form.supportsDimensions"> <div ng-show="form.supportsDimensions">
<umb-control-group label="Size"> <umb-control-group label="Size">
<input type="text" ng-model="form.width" on-blur="changeSize('width')" style="width:50px"/> x <input type="text" ng-model="form.height" on-blur="changeSize('height')" style="width:50px"/> <input type="text" ng-model="form.width" on-blur="changeSize('width')" style="width:50px"/> x <input type="text" ng-model="form.height" on-blur="changeSize('height')" style="width:50px"/>
<label for="constrain" style="display:inline">Constrain:</label> <label for="constrain" style="display:inline">Constrain:</label>
<input id="constrain" type="checkbox" ng-model="form.constrain" style="margin-bottom: 10px;"/> <input id="constrain" type="checkbox" ng-model="form.constrain" style="margin-bottom: 10px;"/>
</umb-control-group> </umb-control-group>
</div> </div>
<div> <div>
<p ng-bind="form.info"></p> <p ng-bind="form.info"></p>
<div ng-bind-html-unsafe="form.preview"></div> <div ng-bind-html-unsafe="form.preview"></div>
</div> </div>
</umb-pane> </umb-pane>
</div> </div>
<div class="umb-panel-footer"> <div class="umb-panel-footer">
<div class="btn-toolbar umb-btn-toolbar pull-right"> <div class="btn-toolbar umb-btn-toolbar pull-right">
<a href class="btn btn-link" ng-click="close()"> <a href class="btn btn-link" ng-click="close()">
<localize key="cancel" /> <localize key="cancel" />
</a> </a>
<input type="button" ng-click="insert()" class="btn btn-primary" value="Ok" ng-disabled="!form.success" /> <input type="button" ng-click="insert()" class="btn btn-primary" value="Ok" ng-disabled="!form.success" />
</div> </div>
</div> </div>
</div> </div>
</form> </form>
@@ -1,60 +1,60 @@
<div class="umb-panel" ng-controller="Umbraco.Dialogs.TreePickerController"> <div class="umb-panel" ng-controller="Umbraco.Dialogs.TreePickerController">
<div class="umb-panel-header"> <div class="umb-panel-header">
<div class="umb-el-wrap umb-panel-buttons"> <div class="umb-el-wrap umb-panel-buttons">
<umb-tree-search-box hide-search-callback="hideSearch" <umb-tree-search-box hide-search-callback="hideSearch"
search-callback="onSearchResults" search-callback="onSearchResults"
search-from-id="{{searchInfo.searchFromId}}" search-from-id="{{searchInfo.searchFromId}}"
search-from-name="{{searchInfo.searchFromName}}" search-from-name="{{searchInfo.searchFromName}}"
show-search="{{searchInfo.showSearch}}" show-search="{{searchInfo.showSearch}}"
section="{{section}}"> section="{{section}}">
</umb-tree-search-box> </umb-tree-search-box>
</div> </div>
</div> </div>
<div class="umb-panel-body with-footer"> <div class="umb-panel-body with-footer">
<div class="tab-content umb-control-group"> <div class="tab-content umb-control-group">
<umb-tree-search-results <umb-tree-search-results
ng-if="searchInfo.showSearch" ng-if="searchInfo.showSearch"
results="searchInfo.results" results="searchInfo.results"
select-result-callback="selectResult"> select-result-callback="selectResult">
</umb-tree-search-results> </umb-tree-search-results>
<div ng-hide="searchInfo.showSearch" ng-animate="'tree-fade-out'"> <div ng-hide="searchInfo.showSearch" ng-animate="'tree-fade-out'">
<umb-tree section="{{section}}" <umb-tree section="{{section}}"
treealias="{{treeAlias}}" treealias="{{treeAlias}}"
hideheader="{{hideHeader}}" hideheader="{{hideHeader}}"
hideoptions="true" hideoptions="true"
isdialog="true" isdialog="true"
customtreeparams="{{customTreeParams}}" customtreeparams="{{customTreeParams}}"
eventhandler="dialogTreeEventHandler" eventhandler="dialogTreeEventHandler"
enablelistviewsearch="true" enablelistviewsearch="true"
enablecheckboxes="{{multiPicker}}"> enablecheckboxes="{{multiPicker}}">
</umb-tree> </umb-tree>
</div> </div>
</div> </div>
</div> </div>
<div class="umb-panel-footer"> <div class="umb-panel-footer">
<div class="umb-el-wrap umb-panel-buttons"> <div class="umb-el-wrap umb-panel-buttons">
<div class="btn-toolbar umb-btn-toolbar pull-right"> <div class="btn-toolbar umb-btn-toolbar pull-right">
<a href ng-click="close()" class="btn btn-link"> <a href ng-click="close()" class="btn btn-link">
<localize key="general_cancel">Cancel</localize> <localize key="general_cancel">Cancel</localize>
</a> </a>
<button <button
class="btn btn-primary" class="btn btn-primary"
ng-if="dialogOptions.multiPicker" ng-if="dialogOptions.multiPicker"
ng-click="multiSubmit(dialogData.selection)"> ng-click="multiSubmit(dialogData.selection)">
<localize key="buttons_select">Select</localize> <localize key="buttons_select">Select</localize>
({{dialogData.selection.length}}) ({{dialogData.selection.length}})
</button> </button>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
@@ -1,119 +1,119 @@
<div class="umb-panel umb-user-panel" ng-controller="Umbraco.Dialogs.UserController"> <div class="umb-panel umb-user-panel" ng-controller="Umbraco.Dialogs.UserController">
<div class="umb-panel-header"> <div class="umb-panel-header">
<div class="umb-el-wrap umb-panel-buttons"> <div class="umb-el-wrap umb-panel-buttons">
<div class="btn-toolbar umb-btn-toolbar"> <div class="btn-toolbar umb-btn-toolbar">
<button ng-click="logout()" hotkey="ctrl+shift+l" class="btn btn-warning"> <button ng-click="logout()" hotkey="ctrl+shift+l" class="btn btn-warning">
<localize key="general_logout">Log out</localize> <localize key="general_logout">Log out</localize>
</button> </button>
</div> </div>
</div> </div>
<h1 class="headline">{{user.name}}</h1> <h1 class="headline">{{user.name}}</h1>
<small class="umb-version">Umbraco version {{version}}</small> <small class="umb-version">Umbraco version {{version}}</small>
<p class="muted"> <p class="muted">
<small> <small>
<localize key="user_sessionExpires" />: {{remainingAuthSeconds | timespan}} <localize key="user_sessionExpires" />: {{remainingAuthSeconds | timespan}}
</small> </small>
</p> </p>
</div> </div>
<div class="umb-panel-body umb-scrollable"> <div class="umb-panel-body umb-scrollable">
<div class="tab-content umb-control-group"> <div class="tab-content umb-control-group">
<div class="umb-pane" ng-if="!showPasswordFields"> <div class="umb-pane" ng-if="!showPasswordFields">
<h5><localize key="user_yourProfile" /></h5> <h5><localize key="user_yourProfile" /></h5>
<a href="#/users/framed/%252Fumbraco%252Fusers%252Fedituser.aspx%253Fid%253D{{user.id}}" <a href="#/users/framed/%252Fumbraco%252Fusers%252Fedituser.aspx%253Fid%253D{{user.id}}"
class="btn btn-primary" class="btn btn-primary"
ng-click="close()" ng-click="close()"
ng-if="canEditProfile"> ng-if="canEditProfile">
<localize key="general_edit">Edit</localize> <localize key="general_edit">Edit</localize>
</a> </a>
<umb-button <umb-button
type="button" type="button"
action="togglePasswordFields()" action="togglePasswordFields()"
label="Change password" label="Change password"
button-style="success"> button-style="success">
</umb-button> </umb-button>
</div> </div>
<div class="umb-pane external-logins" ng-if="externalLoginProviders.length > 0 && !showPasswordFields"> <div class="umb-pane external-logins" ng-if="externalLoginProviders.length > 0 && !showPasswordFields">
<h5>External login providers</h5> <h5>External login providers</h5>
<div ng-repeat="login in externalLoginProviders"> <div ng-repeat="login in externalLoginProviders">
<form ng-if="login.linkedProviderKey == undefined" method="POST" name="externalLoginForm" <form ng-if="login.linkedProviderKey == undefined" method="POST" name="externalLoginForm"
action="{{externalLinkLoginFormAction}}" id="oauthloginform" name="oauthloginform"> action="{{externalLinkLoginFormAction}}" id="oauthloginform" name="oauthloginform">
<input type="hidden" name="provider" value="{{login.authType}}" /> <input type="hidden" name="provider" value="{{login.authType}}" />
<button class="btn btn-block btn-social" <button class="btn btn-block btn-social"
ng-class="login.properties.SocialStyle" ng-class="login.properties.SocialStyle"
id="{{login.authType}}" id="{{login.authType}}"
onclick="document.forms.oauthloginform.submit();"> onclick="document.forms.oauthloginform.submit();">
<i class="fa" ng-class="login.properties.SocialIcon"></i> <i class="fa" ng-class="login.properties.SocialIcon"></i>
Link your {{login.caption}} account Link your {{login.caption}} account
</button> </button>
</form> </form>
<button ng-if="login.linkedProviderKey != undefined" <button ng-if="login.linkedProviderKey != undefined"
ng-click="unlink($event, login.authType, login.linkedProviderKey)" ng-click="unlink($event, login.authType, login.linkedProviderKey)"
class="btn btn-block btn-social" class="btn btn-block btn-social"
ng-class="login.properties.SocialStyle" ng-class="login.properties.SocialStyle"
id="{{login.authType}}" id="{{login.authType}}"
name="provider" name="provider"
value="{{login.authType}}"> value="{{login.authType}}">
<i class="fa" ng-class="login.properties.SocialIcon"></i> <i class="fa" ng-class="login.properties.SocialIcon"></i>
Un-link your {{login.caption}} account Un-link your {{login.caption}} account
</button> </button>
</div> </div>
</div> </div>
<div class="umb-pane" ng-if="!showPasswordFields"> <div class="umb-pane" ng-if="!showPasswordFields">
<h5><localize key="user_yourHistory" /></h5> <h5><localize key="user_yourHistory" /></h5>
<ul class="umb-tree"> <ul class="umb-tree">
<li ng-repeat="item in history | orderBy:'time':true"> <li ng-repeat="item in history | orderBy:'time':true">
<a ng-href="{{item.link}}" ng-click="gotoHistory(item.link)" prevent-default> <a ng-href="{{item.link}}" ng-click="gotoHistory(item.link)" prevent-default>
<i class="{{item.icon}}"></i> {{item.name}} <i class="{{item.icon}}"></i> {{item.name}}
</a> </a>
</li> </li>
</ul> </ul>
</div> </div>
<div class="umb-pane" ng-show="showPasswordFields"> <div class="umb-pane" ng-show="showPasswordFields">
<h5>Change password</h5> <h5>Change password</h5>
<form <form
name="passwordForm" name="passwordForm"
class="block-form" class="block-form"
ng-submit="changePassword()" ng-submit="changePassword()"
novalidate novalidate
val-form-manager> val-form-manager>
<umb-editor model="changePasswordModel"></umb-editor> <umb-editor model="changePasswordModel"></umb-editor>
<umb-button <umb-button
type="button" type="button"
action="togglePasswordFields()" action="togglePasswordFields()"
label="Back" label="Back"
button-style="Cancel"> button-style="Cancel">
</umb-button> </umb-button>
<umb-button <umb-button
type="submit" type="submit"
label="Change password" label="Change password"
state="changePasswordButtonState" state="changePasswordButtonState"
button-style="success"> button-style="success">
</umb-button> </umb-button>
</form> </form>
</div> </div>
</div> </div>
</div> </div>
@@ -1,3 +1,3 @@
<div ng-controller="Umbraco.LegacyController" id="legacyContainer" style="width: 100%; height: 100%;overflow: hidden;"> <div ng-controller="Umbraco.LegacyController" id="legacyContainer" style="width: 100%; height: 100%;overflow: hidden;">
<iframe name="right" id="right" ng-src="{{legacyPath}}"></iframe> <iframe name="right" id="right" ng-src="{{legacyPath}}"></iframe>
</div> </div>
@@ -1,3 +1,3 @@
<div ng-controller="Umbraco.LoginController"> <div ng-controller="Umbraco.LoginController">
</div> </div>
@@ -1,27 +1,27 @@
<form ng-controller="Umbraco.Overlays.EmbedOverlay as vm"> <form ng-controller="Umbraco.Overlays.EmbedOverlay as vm">
<umb-control-group label="Url"> <umb-control-group label="Url">
<input id="url" class="umb-editor input-block-level" type="text" style="margin-bottom: 10px;" ng-model="model.embed.url" ng-keyup="$event.keyCode == 13 ? vm.showPreview() : null" required /> <input id="url" class="umb-editor input-block-level" type="text" style="margin-bottom: 10px;" ng-model="model.embed.url" ng-keyup="$event.keyCode == 13 ? vm.showPreview() : null" required />
<input type="button" ng-click="vm.showPreview()" class="btn" value="Retrieve" /> <input type="button" ng-click="vm.showPreview()" class="btn" value="Retrieve" />
</umb-control-group> </umb-control-group>
<umb-control-group> <umb-control-group>
<p ng-bind="model.embed.info"></p> <p ng-bind="model.embed.info"></p>
<div ng-bind-html-unsafe="model.embed.preview"></div> <div ng-bind-html-unsafe="model.embed.preview"></div>
</umb-control-group> </umb-control-group>
<div ng-show="model.embed.supportsDimensions"> <div ng-show="model.embed.supportsDimensions">
<umb-control-group label="Width"> <umb-control-group label="Width">
<input type="text" ng-model="model.embed.width" on-blur="vm.changeSize('width')" /> <input type="text" ng-model="model.embed.width" on-blur="vm.changeSize('width')" />
</umb-control-group> </umb-control-group>
<umb-control-group label="Height"> <umb-control-group label="Height">
<input type="text" ng-model="model.embed.height" on-blur="vm.changeSize('height')" /> <input type="text" ng-model="model.embed.height" on-blur="vm.changeSize('height')" />
</umb-control-group> </umb-control-group>
<umb-control-group label="Constrain:"> <umb-control-group label="Constrain:">
<input id="constrain" type="checkbox" ng-model="model.embed.constrain" /> <input id="constrain" type="checkbox" ng-model="model.embed.constrain" />
</umb-control-group> </umb-control-group>
</div> </div>
</form> </form>
@@ -18,18 +18,9 @@
</umb-control-group> </umb-control-group>
<umb-control-group label="@content_target"> <umb-control-group label="@content_target">
<select class="umb-editor umb-dropdown" ng-model="model.target.target"> <label class="checkbox no-indent">
<option value=""></option> <input type="checkbox" ng-model="model.target.target" ng-true-value="_blank" ng-false-value="" /> <localize key="defaultdialogs_openInNewWindow">Opens the linked document in a new window or tab</localize>
<option value="_blank"> </label>
<localize key="defaultdialogs_openInNewWindow">Opens the linked document in a new window or tab</localize>
</option>
<option value="_top">
<localize key="defaultdialogs_openInFullBody">Opens the linked document in the full body of the window</localize>
</option>
<option value="_parent">
<localize key="defaultdialogs_openInParentFrame">Opens the linked document in the parent frame</localize>
</option>
</select>
</umb-control-group> </umb-control-group>
<div class="umb-control-group"> <div class="umb-control-group">
@@ -1,42 +1,42 @@
<div ng-controller="Umbraco.Overlays.MacroPickerController"> <div ng-controller="Umbraco.Overlays.MacroPickerController">
<div ng-switch="wizardStep"> <div ng-switch="wizardStep">
<umb-control-group label="Choose a macro" ng-switch-when="macroSelect"> <umb-control-group label="Choose a macro" ng-switch-when="macroSelect">
<select class="umb-editor" ng-change="changeMacro()" <select class="umb-editor" ng-change="changeMacro()"
name="selectedMacro" name="selectedMacro"
ng-model="model.selectedMacro" ng-model="model.selectedMacro"
ng-options="m as m.name for m in macros" ng-options="m as m.name for m in macros"
required> required>
<option value=""><localize key="choose" />...</option> <option value=""><localize key="choose" />...</option>
</select> </select>
<span class="help-inline" val-msg-for="selectedMacro" val-toggle-msg="required"><localize key="required" /></span> <span class="help-inline" val-msg-for="selectedMacro" val-toggle-msg="required"><localize key="required" /></span>
</umb-control-group> </umb-control-group>
<div ng-switch-when="paramSelect"> <div ng-switch-when="paramSelect">
<h5>{{model.selectedMacro.name}}</h5> <h5>{{model.selectedMacro.name}}</h5>
<ul class="unstyled"> <ul class="unstyled">
<li ng-repeat="param in model.macroParams"> <li ng-repeat="param in model.macroParams">
<ng-form name="parameterForm"> <ng-form name="parameterForm">
<umb-control-group label="{{param.name}}"> <umb-control-group label="{{param.name}}">
<umb-editor model="param"></umb-editor> <umb-editor model="param"></umb-editor>
</umb-control-group> </umb-control-group>
</ng-form> </ng-form>
</li> </li>
</ul> </ul>
<umb-empty-state <umb-empty-state
ng-if="noMacroParams" ng-if="noMacroParams"
position="center"> position="center">
<localize key="defaultdialogs_noMacroParams">There are no parameters for this macro</localize> <localize key="defaultdialogs_noMacroParams">There are no parameters for this macro</localize>
</umb-empty-state> </umb-empty-state>
</div> </div>
</div> </div>
</div> </div>
@@ -1,140 +1,142 @@
<form ng-controller="Umbraco.Overlays.MediaPickerController" id="fileupload" <form ng-controller="Umbraco.Overlays.MediaPickerController" id="fileupload"
method="POST" method="POST"
enctype="multipart/form-data" enctype="multipart/form-data"
umb-image-upload="options"> umb-image-upload="options">
<div <div
on-drag-leave="dragLeave()" on-drag-leave="dragLeave()"
on-drag-end="dragLeave()" on-drag-end="dragLeave()"
on-drag-enter="dragEnter()"> on-drag-enter="dragEnter()">
<div class="umb-control-group umb-mediapicker-upload"> <div class="umb-control-group umb-mediapicker-upload">
<div class="form-search"> <div class="form-search">
<i class="icon-search"></i> <i class="icon-search"></i>
<input <input
class="umb-search-field search-query" class="umb-search-field search-query"
ng-model="searchTerm" ng-model="searchTerm"
localize="placeholder" localize="placeholder"
placeholder="@placeholders_filter" placeholder="@placeholders_filter"
type="text"> type="text">
</div> </div>
<div class="upload-button"> <div class="upload-button">
<umb-button <umb-button
type="button" type="button"
key="general_upload" key="general_upload"
label="Upload" label="Upload"
action="upload()" action="upload()"
disabled="disabled"> disabled="disabled">
</umb-button> </umb-button>
</div> </div>
</div> </div>
<div class="row umb-control-group"> <div class="row umb-control-group">
<ul class="umb-breadcrumbs"> <ul class="umb-breadcrumbs">
<li ng-hide="startNodeId != -1" class="umb-breadcrumbs__ancestor"> <li ng-hide="startNodeId != -1" class="umb-breadcrumbs__ancestor">
<a href ng-click="gotoFolder()" prevent-default>Media</a> <a href ng-click="gotoFolder()" prevent-default>Media</a>
<span class="umb-breadcrumbs__seperator">&#47;</span> <span class="umb-breadcrumbs__seperator">&#47;</span>
</li> </li>
<li ng-repeat="item in path" class="umb-breadcrumbs__ancestor"> <li ng-repeat="item in path" class="umb-breadcrumbs__ancestor">
<a href ng-click="gotoFolder(item)" prevent-default>{{item.name}}</a> <a href ng-click="gotoFolder(item)" prevent-default>{{item.name}}</a>
<span class="umb-breadcrumbs__seperator">&#47;</span> <span class="umb-breadcrumbs__seperator">&#47;</span>
</li> </li>
<li class="umb-breadcrumbs__ancestor"> <li class="umb-breadcrumbs__ancestor">
<a href ng-hide="showFolderInput" ng-click="showFolderInput = true"> <a href ng-hide="showFolderInput" ng-click="showFolderInput = true">
<i class="icon icon-add small"></i> <i class="icon icon-add small"></i>
</a> </a>
<input <input
type="text" type="text"
class="input-foldername input-mini inline" class="input-foldername input-mini inline"
ng-show="showFolderInput" ng-show="showFolderInput"
ng-model="newFolderName" ng-model="newFolderName"
ng-keydown="enterSubmitFolder($event)" ng-keydown="enterSubmitFolder($event)"
on-blur="submitFolder()" on-blur="submitFolder()"
focus-when="{{showFolderInput}}" /> focus-when="{{showFolderInput}}" />
</li> </li>
</ul> </ul>
</div> </div>
<umb-file-dropzone <umb-file-dropzone
parent-id="{{currentFolder.id}}" ng-if="acceptedMediatypes.length > 0"
files-uploaded="onUploadComplete" accepted-mediatypes="acceptedMediatypes"
files-queued="onFilesQueue" parent-id="{{currentFolder.id}}"
accept="{{acceptedFileTypes}}" files-uploaded="onUploadComplete"
max-file-size="{{maxFileSize}}" files-queued="onFilesQueue"
hide-dropzone="{{!activeDrag && images.length > 0 }}" accept="{{acceptedFileTypes}}"
compact="{{ images.length > 0 }}"> max-file-size="{{maxFileSize}}"
</umb-file-dropzone> hide-dropzone="{{!activeDrag && images.length > 0 }}"
compact="{{ images.length > 0 }}">
<umb-media-grid </umb-file-dropzone>
items="images"
filter-by="searchTerm" <umb-media-grid
on-click="clickHandler" items="images"
on-click-name="clickItemName" filter-by="searchTerm"
item-max-width="150" on-click="clickHandler"
item-max-height="150" on-click-name="clickItemName"
item-min-width="100" item-max-width="150"
item-min-height="100" item-max-height="150"
only-images={{onlyImages}}> item-min-width="100"
</umb-media-grid> item-min-height="100"
only-images={{onlyImages}}>
</div> </umb-media-grid>
<umb-overlay </div>
ng-if="mediaPickerDetailsOverlay.show"
model="mediaPickerDetailsOverlay" <umb-overlay
position="right"> ng-if="mediaPickerDetailsOverlay.show"
model="mediaPickerDetailsOverlay"
<div class="umb-control-group"> position="right">
<div ng-if="target.url"> <div class="umb-control-group">
<umb-image-gravity
src="target.url" <div ng-if="target.url">
center="target.focalPoint"> <umb-image-gravity
</umb-image-gravity> src="target.url"
</div> center="target.focalPoint">
</umb-image-gravity>
<div ng-if="cropSize"> </div>
<h5> <div ng-if="cropSize">
<localize key="general_preview">Preview</localize>
</h5> <h5>
<localize key="general_preview">Preview</localize>
<umb-image-thumbnail </h5>
center="target.focalPoint"
src="target.url" <umb-image-thumbnail
height="{{cropSize.height}}" center="target.focalPoint"
width="{{cropSize.width}}" src="target.url"
max-size="400"> height="{{cropSize.height}}"
</umb-image-thumbnail> width="{{cropSize.width}}"
max-size="400">
</div> </umb-image-thumbnail>
</div> </div>
<div class="umb-control-group"> </div>
<label><localize key="@general_url"></localize></label>
<input <div class="umb-control-group">
type="text" <label><localize key="@general_url"></localize></label>
localize="placeholder" <input
placeholder="@general_url" type="text"
class="umb-editor umb-textstring" localize="placeholder"
ng-model="target.url" placeholder="@general_url"
ng-disabled="target.id" /> class="umb-editor umb-textstring"
</div> ng-model="target.url"
ng-disabled="target.id" />
<div class="umb-control-group"> </div>
<label><localize key="@content_altTextOptional"></localize></label>
<input type="text" class="umb-editor umb-textstring" ng-model="target.altText" /> <div class="umb-control-group">
</div> <label><localize key="@content_altTextOptional"></localize></label>
<input type="text" class="umb-editor umb-textstring" ng-model="target.altText" />
</div>
</umb-overlay>
</form> </umb-overlay>
</form>
@@ -0,0 +1,15 @@
<div ng-controller="Umbraco.Overlays.MediaTypePickerController">
<ul class="umb-card-grid">
<li
ng-repeat="mediatype in model.acceptedMediatypes | orderBy:'name'"
ng-click="select(mediatype)"
class="-three-in-row">
<a class="umb-card-grid-item" href="" title="{{mediatype.name}}">
<i class="{{ mediatype.icon }}"></i>
{{ mediatype.name }}
</a>
</li>
</ul>
</div>
@@ -1,12 +1,12 @@
<div ng-controller="Umbraco.Overlays.MemberGroupPickerController"> <div ng-controller="Umbraco.Overlays.MemberGroupPickerController">
<umb-tree section="member" <umb-tree section="member"
treealias="memberGroups" treealias="memberGroups"
hideheader="true" hideheader="true"
hideoptions="true" hideoptions="true"
isdialog="true" isdialog="true"
eventhandler="dialogTreeEventHandler" eventhandler="dialogTreeEventHandler"
enablecheckboxes="{{model.multiPicker}}"> enablecheckboxes="{{model.multiPicker}}">
</umb-tree> </umb-tree>
</div> </div>
@@ -1,34 +1,34 @@
<div ng-controller="Umbraco.Overlays.TreePickerController"> <div ng-controller="Umbraco.Overlays.TreePickerController">
<div class="umb-control-group"> <div class="umb-control-group">
<umb-tree-search-box <umb-tree-search-box
hide-search-callback="hideSearch" hide-search-callback="hideSearch"
search-callback="onSearchResults" search-callback="onSearchResults"
search-from-id="{{searchInfo.searchFromId}}" search-from-id="{{searchInfo.searchFromId}}"
search-from-name="{{searchInfo.searchFromName}}" search-from-name="{{searchInfo.searchFromName}}"
show-search="{{searchInfo.showSearch}}" show-search="{{searchInfo.showSearch}}"
section="{{section}}"> section="{{section}}">
</umb-tree-search-box> </umb-tree-search-box>
</div> </div>
<umb-tree-search-results <umb-tree-search-results
ng-if="searchInfo.showSearch" ng-if="searchInfo.showSearch"
results="searchInfo.results" results="searchInfo.results"
select-result-callback="selectResult"> select-result-callback="selectResult">
</umb-tree-search-results> </umb-tree-search-results>
<div ng-hide="searchInfo.showSearch" ng-animate="'tree-fade-out'"> <div ng-hide="searchInfo.showSearch" ng-animate="'tree-fade-out'">
<umb-tree <umb-tree
section="{{section}}" section="{{section}}"
treealias="{{treeAlias}}" treealias="{{treeAlias}}"
hideheader="{{hideHeader}}" hideheader="{{hideHeader}}"
hideoptions="true" hideoptions="true"
isdialog="true" isdialog="true"
customtreeparams="{{customTreeParams}}" customtreeparams="{{customTreeParams}}"
eventhandler="dialogTreeEventHandler" eventhandler="dialogTreeEventHandler"
enablelistviewsearch="true" enablelistviewsearch="true"
enablecheckboxes="{{multiPicker}}"> enablecheckboxes="{{multiPicker}}">
</umb-tree> </umb-tree>
</div> </div>
</div> </div>
@@ -1,27 +1,27 @@
<div ng-controller="Umbraco.Overlays.YsodController"> <div ng-controller="Umbraco.Overlays.YsodController">
<h4 class="heading red">{{model.error.errorMsg}}</h4> <h4 class="heading red">{{model.error.errorMsg}}</h4>
<p>{{model.error.data.ExceptionMessage || model.error.data.Message}}</p> <p>{{model.error.data.ExceptionMessage || model.error.data.Message}}</p>
<div class="umb-control-group"> <div class="umb-control-group">
<h5> <h5>
<localize key="defaultdialogs_exceptionDetail">Exception Details:</localize> <localize key="defaultdialogs_exceptionDetail">Exception Details:</localize>
</h5> </h5>
{{model.error.data.ExceptionType}}: {{model.error.data.ExceptionMessage}} {{model.error.data.ExceptionType}}: {{model.error.data.ExceptionMessage}}
</div> </div>
<div class="umb-control-group"> <div class="umb-control-group">
<h5> <h5>
<localize key="defaultdialogs_stacktrace">Stacktrace:</localize> <localize key="defaultdialogs_stacktrace">Stacktrace:</localize>
</h5> </h5>
<pre style="white-space: pre-wrap; overflow-x: auto;">{{model.error.data.StackTrace}}</pre> <pre style="white-space: pre-wrap; overflow-x: auto;">{{model.error.data.StackTrace}}</pre>
</div> </div>
<div class="umb-control-group" ng-repeat="e in model.error.data.InnerExceptions"> <div class="umb-control-group" ng-repeat="e in model.error.data.InnerExceptions">
<h5> <h5>
<localize key="defaultdialogs_innerException">Inner Exception:</localize> <localize key="defaultdialogs_innerException">Inner Exception:</localize>
</h5> </h5>
<div>{{e.ExceptionType}}: {{e.ExceptionMessage}}</div> <div>{{e.ExceptionType}}: {{e.ExceptionMessage}}</div>
<pre style="white-space: pre-wrap; overflow-x: auto;">{{e.StackTrace}}</pre> <pre style="white-space: pre-wrap; overflow-x: auto;">{{e.StackTrace}}</pre>
</div> </div>
</div> </div>
@@ -1,17 +1,17 @@
<div> <div>
<div class='umb-modalcolumn-header'> <div class='umb-modalcolumn-header'>
<h1>{{menuDialogTitle}}</h1> <h1>{{menuDialogTitle}}</h1>
</div> </div>
<div class='umb-modalcolumn-body'> <div class='umb-modalcolumn-body'>
<ul class="umb-actions"> <ul class="umb-actions">
<li class="action" ng-class="{sep:action.seperator}" ng-repeat="action in menuActions"> <li class="action" ng-class="{sep:action.seperator}" ng-repeat="action in menuActions">
<a prevent-default <a prevent-default
ng-click="executeMenuItem(action)"> ng-click="executeMenuItem(action)">
<i class="icon icon-{{action.cssclass}}"></i> <i class="icon icon-{{action.cssclass}}"></i>
<span class="menu-label">{{action.name}}</span> <span class="menu-label">{{action.name}}</span>
</a> </a>
</li> </li>
</ul> </ul>
</div> </div>
</div> </div>
@@ -1,104 +1,104 @@
<div id="leftcolumn" ng-controller="Umbraco.NavigationController" <div id="leftcolumn" ng-controller="Umbraco.NavigationController"
ng-mouseleave="leaveTree($event)" ng-mouseenter="enterTree($event)"> ng-mouseleave="leaveTree($event)" ng-mouseenter="enterTree($event)">
<umb-sections sections="sections" ng-if="authenticated"> <umb-sections sections="sections" ng-if="authenticated">
</umb-sections> </umb-sections>
<!-- navigation container --> <!-- navigation container -->
<div id="navigation" ng-show="showNavigation" class="fill umb-modalcolumn" ng-animate="'slide'" nav-resize> <div id="navigation" ng-show="showNavigation" class="fill umb-modalcolumn" ng-animate="'slide'" nav-resize>
<div ng-swipe-left="nav.hideNavigation()" class="navigation-inner-container span6"> <div ng-swipe-left="nav.hideNavigation()" class="navigation-inner-container span6">
<!-- the search --> <!-- the search -->
<div ng-controller="Umbraco.SearchController" ng-if="authenticated"> <div ng-controller="Umbraco.SearchController" ng-if="authenticated">
<!-- Search form --> <!-- Search form -->
<div id="search-form"> <div id="search-form">
<div class="umb-modalcolumn-header"> <div class="umb-modalcolumn-header">
<form class="form-search" novalidate> <form class="form-search" novalidate>
<i class="icon-search"></i> <i class="icon-search"></i>
<input type="text" <input type="text"
hotkey="ctrl+space" hotkey="ctrl+space"
id="search-field" id="search-field"
ng-model="searchTerm" ng-model="searchTerm"
class="umb-search-field search-query search-input" class="umb-search-field search-query search-input"
localize="placeholder" localize="placeholder"
placeholder="@placeholders_search" placeholder="@placeholders_search"
ng-keydown="navigateResults($event)"/> ng-keydown="navigateResults($event)"/>
</form> </form>
</div> </div>
</div> </div>
<!-- Search results --> <!-- Search results -->
<div id="search-results" class="umb-modalcolumn-body" ng-show="showSearchResults"> <div id="search-results" class="umb-modalcolumn-body" ng-show="showSearchResults">
<ul class="umb-tree"> <ul class="umb-tree">
<li class="root"> <li class="root">
<div> <div>
<h5 class="umb-tree-header"><localize key="general_searchResults">Search results</localize></h5> <h5 class="umb-tree-header"><localize key="general_searchResults">Search results</localize></h5>
</div> </div>
<ul class="umb-search-group" ng-repeat="group in groups"> <ul class="umb-search-group" ng-repeat="group in groups">
<li ng-repeat="result in group.results" ng-class="{'current':selectedItem == result}"> <li ng-repeat="result in group.results" ng-class="{'current':selectedItem == result}">
<div class="umb-search-group-item"> <div class="umb-search-group-item">
<a class="umb-search-group-item-link" ng-class="{'first':$first}" ng-click="searchHide()" ng-href="#/{{result.editorPath}}"> <a class="umb-search-group-item-link" ng-class="{'first':$first}" ng-click="searchHide()" ng-href="#/{{result.editorPath}}">
<div class="umb-search-group-item-name"> <div class="umb-search-group-item-name">
<i class="icon umb-tree-icon sprTree {{result.icon}}"></i> <i class="icon umb-tree-icon sprTree {{result.icon}}"></i>
{{result.name}} {{result.name}}
</div> </div>
<small class="search-subtitle" ng-show="result.subTitle"> <small class="search-subtitle" ng-show="result.subTitle">
{{result.subTitle}} {{result.subTitle}}
</small> </small>
</a> </a>
<a href ng-click="searchShowMenu($event, {node: result})" class="umb-options"><i></i><i></i><i></i></a> <a href ng-click="searchShowMenu($event, {node: result})" class="umb-options"><i></i><i></i><i></i></a>
</div> </div>
</li> </li>
</ul> </ul>
</li> </li>
</ul> </ul>
</div> </div>
</div> </div>
<!-- the tree --> <!-- the tree -->
<div id="tree" class="umb-modalcolumn-body" ng-if="authenticated"> <div id="tree" class="umb-modalcolumn-body" ng-if="authenticated">
<umb-tree <umb-tree
cachekey="_" cachekey="_"
eventhandler="treeEventHandler" eventhandler="treeEventHandler"
section="{{currentSection}}" > section="{{currentSection}}" >
</umb-tree> </umb-tree>
</div> </div>
</div> </div>
<div class="offset6" id="navOffset" style="z-index: 10"> <div class="offset6" id="navOffset" style="z-index: 10">
<!-- The context menu --> <!-- The context menu -->
<div id='contextMenu' class="umb-modalcolumn fill shadow" ng-swipe-left="nav.hideMenu()" ng-show="showContextMenu" ng-animate="'slide'"> <div id='contextMenu' class="umb-modalcolumn fill shadow" ng-swipe-left="nav.hideMenu()" ng-show="showContextMenu" ng-animate="'slide'">
<umb-context-menu <umb-context-menu
menu-dialog-title="{{menuDialogTitle}}" menu-dialog-title="{{menuDialogTitle}}"
current-section="{{currentSection}}" current-section="{{currentSection}}"
current-node="menuNode" current-node="menuNode"
menu-actions="menuActions"> menu-actions="menuActions">
</umb-context-menu> </umb-context-menu>
</div> </div>
<!-- Tree dialogs --> <!-- Tree dialogs -->
<div id="dialog" class='umb-modalcolumn fill shadow' <div id="dialog" class='umb-modalcolumn fill shadow'
ng-swipe-left="nav.hideDialog()" ng-swipe-left="nav.hideDialog()"
ng-show="showContextMenuDialog" ng-animate="'slide'"> ng-show="showContextMenuDialog" ng-animate="'slide'">
<div class='umb-modalcolumn-header'> <div class='umb-modalcolumn-header'>
<h1>{{menuDialogTitle}}</h1> <h1>{{menuDialogTitle}}</h1>
</div> </div>
<div class='umb-modalcolumn-body'> <div class='umb-modalcolumn-body'>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
@@ -1,66 +1,66 @@
<div> <div>
<div id="applications" ng-class="{faded:stickyNavigation}"> <div id="applications" ng-class="{faded:stickyNavigation}">
<ul class="sections"> <ul class="sections">
<li class="avatar"> <li class="avatar">
<a href="#" ng-click="avatarClick()" hotkey="ctrl+shift+u" title="{{user.name}}" prevent-default> <a href="#" ng-click="avatarClick()" hotkey="ctrl+shift+u" title="{{user.name}}" prevent-default>
<umb-avatar <umb-avatar
size="xs" size="xs"
img-src="{{avatar[0].value}}" img-src="{{avatar[0].value}}"
img-srcset="{{avatar[1].value}} 2x, {{avatar[2].value}} 3x"> img-srcset="{{avatar[1].value}} 2x, {{avatar[2].value}} 3x">
</umb-avatar> </umb-avatar>
</a> </a>
</li> </li>
<li ng-repeat="section in sections | limitTo: maxSections" ng-class="{current: section.alias == currentSection}"> <li ng-repeat="section in sections | limitTo: maxSections" ng-class="{current: section.alias == currentSection}">
<a href="#/{{section.alias}}" <a href="#/{{section.alias}}"
ng-dblclick="sectionDblClick(section)" ng-dblclick="sectionDblClick(section)"
ng-click="sectionClick($event, section)" ng-click="sectionClick($event, section)"
prevent-default> prevent-default>
<section-icon icon="{{section.cssclass}}"></section-icon> <section-icon icon="{{section.cssclass}}"></section-icon>
<span>{{section.name}}</span> <span>{{section.name}}</span>
</a> </a>
</li> </li>
<li class="expand" ng-class="{ 'open': showTray === true }" ng-show="needTray"> <li class="expand" ng-class="{ 'open': showTray === true }" ng-show="needTray">
<a href ng-click="trayClick()"> <a href ng-click="trayClick()">
<i class="icon icon-arrow-right"></i> <i class="icon icon-arrow-right"></i>
</a> </a>
</li> </li>
<li class="help"> <li class="help">
<a href class="help" hotkey="ctrl+shift+h" ng-click="helpClick()" prevent-default> <a href class="help" hotkey="ctrl+shift+h" ng-click="helpClick()" prevent-default>
<i class="icon-help-alt"></i> <i class="icon-help-alt"></i>
<span><localize key="sections_help">Help</localize></span> <span><localize key="sections_help">Help</localize></span>
</a> </a>
</li> </li>
</ul> </ul>
</div> </div>
<div id="applications-tray" ng-show="showTray" ng-animate="trayAnimation()" style="display: none;"> <div id="applications-tray" ng-show="showTray" ng-animate="trayAnimation()" style="display: none;">
<ul class="sections sections-tray"> <ul class="sections sections-tray">
<li ng-repeat="section in sections | limitTo: overflowingSections" ng-class="{current: section.alias == currentSection}"> <li ng-repeat="section in sections | limitTo: overflowingSections" ng-class="{current: section.alias == currentSection}">
<a href="#/{{section.alias}}" <a href="#/{{section.alias}}"
ng-dblclick="sectionDblClick(section)" ng-dblclick="sectionDblClick(section)"
ng-click="sectionClick($event, section)" ng-click="sectionClick($event, section)"
prevent-default> prevent-default>
<section-icon icon="{{section.cssclass}}"></section-icon> <section-icon icon="{{section.cssclass}}"></section-icon>
<span>{{section.name}}</span> <span>{{section.name}}</span>
</a> </a>
</li> </li>
</ul> </ul>
</div> </div>
<umb-overlay <umb-overlay
ng-if="helpDialog.show" ng-if="helpDialog.show"
model="helpDialog" model="helpDialog"
view="helpDialog.view" view="helpDialog.view"
position="left"> position="left">
</umb-overlay> </umb-overlay>
<umb-overlay <umb-overlay
ng-if="userDialog.show" ng-if="userDialog.show"
model="userDialog" model="userDialog"
view="userDialog.view" view="userDialog.view"
position="left"> position="left">
</umb-overlay> </umb-overlay>
</div> </div>
@@ -1,13 +1,13 @@
<div class="umb-property"> <div class="umb-property">
<div class="control-group umb-control-group" ng-class="{error: !formValid(), hidelabel:hideLabel=='true'}"> <div class="control-group umb-control-group" ng-class="{error: !formValid(), hidelabel:hideLabel=='true'}">
<div class="umb-el-wrap"> <div class="umb-el-wrap">
<label ng-if="hideLabel!=='true'" class="control-label" for="{{alias}}"> <label ng-if="hideLabel!=='true'" class="control-label" for="{{alias}}">
{{labelstring}} {{labelstring}}
<small>{{descriptionstring}}</small> <small>{{descriptionstring}}</small>
</label> </label>
<div class="controls controls-row" ng-transclude> <div class="controls controls-row" ng-transclude>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
@@ -1,3 +1,3 @@
<div class="umb-pane" ng-transclude> <div class="umb-pane" ng-transclude>
</div> </div>
@@ -1,3 +1,3 @@
<div class="umb-panel tabbable" ng-transclude> <div class="umb-panel tabbable" ng-transclude>
</div> </div>
@@ -1,21 +1,21 @@
<div class="umb-notifications" id="umb-notifications-wrapper" ng-cloak> <div class="umb-notifications" id="umb-notifications-wrapper" ng-cloak>
<ul class="umb-notifications__notifications"> <ul class="umb-notifications__notifications">
<li ng-repeat="notification in notifications" <li ng-repeat="notification in notifications"
class="alert alert-block alert-{{notification.type}} umb-notifications__notification animated -half-second fadeIn" class="alert alert-block alert-{{notification.type}} umb-notifications__notification animated -half-second fadeIn"
ng-class="{'-no-border -extra-padding': notification.type === 'form'}"> ng-class="{'-no-border -extra-padding': notification.type === 'form'}">
<a class='close -align-right' ng-click="removeNotification($index)" prevent-default href>&times;</a> <a class='close -align-right' ng-click="removeNotification($index)" prevent-default href>&times;</a>
<div ng-if="notification.view"> <div ng-if="notification.view">
<div ng-include="notification.view"></div> <div ng-include="notification.view"></div>
</div> </div>
<div ng-if="notification.headline"> <div ng-if="notification.headline">
<a ng-href="{{notification.url}}" target="_blank"> <a ng-href="{{notification.url}}" target="_blank">
<strong>{{notification.headline}}</strong> <strong>{{notification.headline}}</strong>
<span ng-bind-html="notification.message"></span> <span ng-bind-html="notification.message"></span>
</a> </a>
</div> </div>
</li> </li>
</ul> </ul>
</div> </div>
@@ -1,5 +1,5 @@
<div class='umb-tab-pane tab-pane'> <div class='umb-tab-pane tab-pane'>
<div class='umb-tab-pane-inner'> <div class='umb-tab-pane-inner'>
<div ng-transclude></div> <div ng-transclude></div>
</div> </div>
</div> </div>
@@ -1,10 +1,10 @@
<div> <div>
<p ng-hide="!caption" class="umb-abstract">{{caption}}</p> <p ng-hide="!caption" class="umb-abstract">{{caption}}</p>
<div class="umb-pane btn-toolbar umb-btn-toolbar"> <div class="umb-pane btn-toolbar umb-btn-toolbar">
<div class="control-group umb-control-group"> <div class="control-group umb-control-group">
<a href class="btn btn-link" ng-click="onCancel()"><localize key="general_cancel">Cancel</localize></a> <a href class="btn btn-link" ng-click="onCancel()"><localize key="general_cancel">Cancel</localize></a>
<a href class="btn btn-primary" ng-click="onConfirm()"><localize key="general_ok">Ok</localize></a> <a href class="btn btn-primary" ng-click="onConfirm()"><localize key="general_ok">Ok</localize></a>
</div> </div>
</div> </div>
</div> </div>
@@ -12,10 +12,10 @@
<div class="umb-media-grid__image-background" ng-if="item.thumbnail || item.extension == 'svg'"></div> <div class="umb-media-grid__image-background" ng-if="item.thumbnail || item.extension == 'svg'"></div>
<!-- Image thumbnail --> <!-- Image thumbnail -->
<img class="umb-media-grid__item-image" width="{{item.width}}" height="{{item.height}}" ng-if="item.thumbnail" ng-src="{{item.thumbnail}}" alt="{{item.name}}" draggable="false" /> <img class="umb-media-grid__item-image" width="{{item.width}}" height="{{item.height}}" ng-if="item.thumbnail" ng-src="{{item.thumbnail}}" alt="{{item.name}}" title="{{item.name}}" draggable="false" />
<!-- SVG --> <!-- SVG -->
<img class="umb-media-grid__item-image" width="{{item.width}}" height="{{item.height}}" ng-if="!item.thumbnail && item.extension == 'svg'" ng-src="{{item.file}}" alt="{{item.name}}" draggable="false" /> <img class="umb-media-grid__item-image" width="{{item.width}}" height="{{item.height}}" ng-if="!item.thumbnail && item.extension == 'svg'" ng-src="{{item.file}}" alt="{{item.name}}" title="{{item.name}}" draggable="false" />
<!-- Transparent image - fallback - used to keep image proportions on wrapper--> <!-- Transparent image - fallback - used to keep image proportions on wrapper-->
<img class="umb-media-grid__item-image-placeholder" ng-if="!item.thumbnail && item.extension != 'svg'" src="assets/img/transparent.png" alt="{{item.name}}" draggable="false" /> <img class="umb-media-grid__item-image-placeholder" ng-if="!item.thumbnail && item.extension != 'svg'" src="assets/img/transparent.png" alt="{{item.name}}" draggable="false" />
@@ -1,60 +1,60 @@
<div> <div>
<div class="umb-table" ng-if="items"> <div class="umb-table" ng-if="items">
<!-- Listviews head section --> <!-- Listviews head section -->
<div class="umb-table-head"> <div class="umb-table-head">
<div class="umb-table-row"> <div class="umb-table-row">
<div class="umb-table-cell"> <div class="umb-table-cell">
<input class="umb-table__input" type="checkbox" <input class="umb-table__input" type="checkbox"
ng-if="allowSelectAll" ng-if="allowSelectAll"
ng-click="selectAll($event)" ng-click="selectAll($event)"
ng-checked="isSelectedAll()"> ng-checked="isSelectedAll()">
</div> </div>
<div class="umb-table-cell umb-table__name"> <div class="umb-table-cell umb-table__name">
<a class="umb-table-head__link sortable" href="#" ng-click="sort('Name', true, true)" prevent-default> <a class="umb-table-head__link sortable" href="#" ng-click="sort('Name', true, true)" prevent-default>
<localize key="general_name">Name</localize> <localize key="general_name">Name</localize>
<i class="umb-table-head__icon icon" ng-class="{'icon-navigation-up': isSortDirection('Name', 'asc'), 'icon-navigation-down': isSortDirection('Name', 'desc')}"></i> <i class="umb-table-head__icon icon" ng-class="{'icon-navigation-up': isSortDirection('Name', 'asc'), 'icon-navigation-down': isSortDirection('Name', 'desc')}"></i>
</a> </a>
</div> </div>
<div class="umb-table-cell" ng-repeat="column in itemProperties"> <div class="umb-table-cell" ng-repeat="column in itemProperties">
<a class="umb-table-head__link" title="Sort by {{ column.header }}" href="#" <a class="umb-table-head__link" title="Sort by {{ column.header }}" href="#"
ng-click="sort(column.alias, column.allowSorting, column.isSystem)" ng-click="sort(column.alias, column.allowSorting, column.isSystem)"
ng-class="{'sortable':column.allowSorting}" prevent-default> ng-class="{'sortable':column.allowSorting}" prevent-default>
<span ng-bind="column.header"></span> <span ng-bind="column.header"></span>
<i class="umb-table-head__icon icon" ng-class="{'icon-navigation-up': isSortDirection(column.alias, 'asc'), 'icon-navigation-down': isSortDirection(column.alias, 'desc')}"></i> <i class="umb-table-head__icon icon" ng-class="{'icon-navigation-up': isSortDirection(column.alias, 'asc'), 'icon-navigation-down': isSortDirection(column.alias, 'desc')}"></i>
</a> </a>
</div> </div>
</div> </div>
</div> </div>
<!-- Listview body section --> <!-- Listview body section -->
<div class="umb-table-body"> <div class="umb-table-body">
<div class="umb-table-row" <div class="umb-table-row"
ng-repeat="item in items" ng-repeat="item in items"
ng-class="{ ng-class="{
'-selected':item.selected, '-selected':item.selected,
'-published':item.published, '-published':item.published,
'-unpublished':!item.published '-unpublished':!item.published
}" }"
ng-click="selectItem(item, $index, $event)"> ng-click="selectItem(item, $index, $event)">
<div class="umb-table-cell" ng-class="{'has-unpublished-version':!item.published && item.hasPublishedVersion}"> <div class="umb-table-cell" ng-class="{'has-unpublished-version':!item.published && item.hasPublishedVersion}">
<i class="umb-table-body__icon umb-table-body__fileicon {{item.icon}}" ng-class="getIcon(item)"></i> <i class="umb-table-body__icon umb-table-body__fileicon {{item.icon}}" ng-class="getIcon(item)"></i>
<i class="umb-table-body__icon umb-table-body__checkicon icon-check"></i> <i class="umb-table-body__icon umb-table-body__checkicon icon-check"></i>
</div> </div>
<div class="umb-table-cell umb-table__name"> <div class="umb-table-cell umb-table__name">
<a title="{{ item.name }}" class="umb-table-body__link" href="" <a title="{{ item.name }}" class="umb-table-body__link" href=""
ng-click="clickItem(item, $event)" ng-click="clickItem(item, $event)"
ng-bind="item.name"> ng-bind="item.name">
</a> </a>
</div> </div>
<div class="umb-table-cell" ng-repeat="column in itemProperties"> <div class="umb-table-cell" ng-repeat="column in itemProperties">
<span title="{{column.header}}: {{item[column.alias]}}">{{item[column.alias]}}</span> <span title="{{column.header}}: {{item[column.alias]}}">{{item[column.alias]}}</span>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<!-- If list is empty, then display --> <!-- If list is empty, then display -->
<umb-empty-state ng-if="!items" <umb-empty-state ng-if="!items"
position="center"> position="center">
<localize key="content_listViewNoItems">There are no items show in the list.</localize> <localize key="content_listViewNoItems">There are no items show in the list.</localize>
</umb-empty-state> </umb-empty-state>
</div> </div>
@@ -98,4 +98,11 @@
</ng-form> </ng-form>
<umb-overlay
ng-if="mediatypepickerOverlay.show"
model="mediatypepickerOverlay"
view="mediatypepickerOverlay.view"
position="right">
</umb-overlay>
</div> </div>

Some files were not shown because too many files have changed in this diff Show More