18 Commits

Author SHA1 Message Date
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
837 changed files with 201083 additions and 200553 deletions
+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#" %>
+46 -45
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.4\build\UmbracoCms.props" Condition="Exists('..\packages\UmbracoCms.7.5.4\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,16 +47,16 @@
<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.6136.27244, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\businesslogic.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.4\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.1.0, Culture=neutral, processorArchitecture=MSIL">
@@ -67,12 +67,12 @@
<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.6136.27244, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\cms.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.4\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.6136.27246, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\controls.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.4\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,8 +83,8 @@
<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.0, Culture=neutral, PublicKeyToken=bd319b19eaf3b43a, processorArchitecture=MSIL">
@@ -95,20 +95,20 @@
<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.6136.27240, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\interfaces.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.4\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.4\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.4\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.6136.27245, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\SQLCE4Umbraco.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.4\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.4\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.4\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.4\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.6136.27248, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\umbraco.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.4\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.6136.27241, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\Umbraco.Core.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.4\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.6136.27243, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\umbraco.DataLayer.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.4\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.6136.27251, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\umbraco.editorControls.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.4\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.6136.27252, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\umbraco.MacroEngines.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.4\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.4.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Umbraco.ModelsBuilder.3.0.4\lib\Umbraco.ModelsBuilder.dll</HintPath> <HintPath>..\packages\Umbraco.ModelsBuilder.3.0.4\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.6136.27246, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\umbraco.providers.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.4\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.6136.27253, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\Umbraco.Web.UI.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.4\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.27245, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\UmbracoExamine.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.4\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">
@@ -4486,10 +4486,11 @@
<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.4\build\UmbracoCms.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\UmbracoCms.7.5.4\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.4\build\UmbracoCms.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\UmbracoCms.7.5.4\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.4\build\UmbracoCms.targets" Condition="Exists('..\packages\UmbracoCms.7.5.4\build\UmbracoCms.targets')" />
<Import Project="..\packages\AutoMapper.3.3.1\tools\AutoMapper.targets" Condition="Exists('..\packages\AutoMapper.3.3.1\tools\AutoMapper.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">
+2
View File
@@ -8,6 +8,8 @@
</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.
+12 -2
View File
@@ -36,6 +36,16 @@
views/dashboard/developer/examinemanagement.html views/dashboard/developer/examinemanagement.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>
</section> </section>
<section alias="StartupMediaDashboardSection"> <section alias="StartupMediaDashboardSection">
@@ -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>
@@ -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>"
} }
} }
+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({
+6 -6
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.1" 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" 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" />
@@ -51,8 +51,8 @@
<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.4" targetFramework="net452" />
<package id="UmbracoCms" version="7.5.3" targetFramework="net452" /> <package id="UmbracoCms" version="7.5.4" targetFramework="net452" />
<package id="UmbracoCms.Core" version="7.5.3" targetFramework="net452" /> <package id="UmbracoCms.Core" version="7.5.4" 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,159 @@
<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}}" hide-dropzone="{{!activeDrag && images.length > 0}}"
parent-id="{{currentFolder.id}}" parent-id="{{currentFolder.id}}"
files-uploaded="onUploadComplete" files-uploaded="onUploadComplete"
files-queued="onFilesQueue"> files-queued="onFilesQueue">
</umb-file-dropzone> </umb-file-dropzone>
<umb-photo-folder <umb-photo-folder
min-height="105" min-height="105"
min-width="150" min-width="150"
max-height="250" max-height="250"
ideal-items-per-row="3" ideal-items-per-row="3"
on-click="clickHandler" on-click="clickHandler"
ng-model="images" ng-model="images"
images-only="{{onlyImages}}" images-only="{{onlyImages}}"
filter-by="searchTerm" /> filter-by="searchTerm" />
</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-show="multiPicker" ng-show="multiPicker"
ng-click="submit(dialogData.selection)"> ng-click="submit(dialogData.selection)">
<localize key="buttons_select">Select</localize>({{dialogData.selection.length}}) <localize key="buttons_select">Select</localize>({{dialogData.selection.length}})
</button> </button>
</div> </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>
@@ -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,140 @@
<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}}" parent-id="{{currentFolder.id}}"
files-uploaded="onUploadComplete" files-uploaded="onUploadComplete"
files-queued="onFilesQueue" files-queued="onFilesQueue"
accept="{{acceptedFileTypes}}" accept="{{acceptedFileTypes}}"
max-file-size="{{maxFileSize}}" max-file-size="{{maxFileSize}}"
hide-dropzone="{{!activeDrag && images.length > 0 }}" hide-dropzone="{{!activeDrag && images.length > 0 }}"
compact="{{ images.length > 0 }}"> compact="{{ images.length > 0 }}">
</umb-file-dropzone> </umb-file-dropzone>
<umb-media-grid <umb-media-grid
items="images" items="images"
filter-by="searchTerm" filter-by="searchTerm"
on-click="clickHandler" on-click="clickHandler"
on-click-name="clickItemName" on-click-name="clickItemName"
item-max-width="150" item-max-width="150"
item-max-height="150" item-max-height="150"
item-min-width="100" item-min-width="100"
item-min-height="100" item-min-height="100"
only-images={{onlyImages}}> only-images={{onlyImages}}>
</umb-media-grid> </umb-media-grid>
</div> </div>
<umb-overlay <umb-overlay
ng-if="mediaPickerDetailsOverlay.show" ng-if="mediaPickerDetailsOverlay.show"
model="mediaPickerDetailsOverlay" model="mediaPickerDetailsOverlay"
position="right"> position="right">
<div class="umb-control-group"> <div class="umb-control-group">
<div ng-if="target.url"> <div ng-if="target.url">
<umb-image-gravity <umb-image-gravity
src="target.url" src="target.url"
center="target.focalPoint"> center="target.focalPoint">
</umb-image-gravity> </umb-image-gravity>
</div> </div>
<div ng-if="cropSize"> <div ng-if="cropSize">
<h5> <h5>
<localize key="general_preview">Preview</localize> <localize key="general_preview">Preview</localize>
</h5> </h5>
<umb-image-thumbnail <umb-image-thumbnail
center="target.focalPoint" 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">
</umb-image-thumbnail> </umb-image-thumbnail>
</div> </div>
</div> </div>
<div class="umb-control-group"> <div class="umb-control-group">
<label><localize key="@general_url"></localize></label> <label><localize key="@general_url"></localize></label>
<input <input
type="text" 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" />
</div> </div>
<div class="umb-control-group"> <div class="umb-control-group">
<label><localize key="@content_altTextOptional"></localize></label> <label><localize key="@content_altTextOptional"></localize></label>
<input type="text" class="umb-editor umb-textstring" ng-model="target.altText" /> <input type="text" class="umb-editor umb-textstring" ng-model="target.altText" />
</div> </div>
</umb-overlay> </umb-overlay>
</form> </form>
@@ -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>
+76 -76
View File
@@ -1,77 +1,77 @@
<div ng-controller="Umbraco.Editors.Content.CopyController"> <div ng-controller="Umbraco.Editors.Content.CopyController">
<div class="umb-dialog-body form-horizontal"> <div class="umb-dialog-body form-horizontal">
<div class="umb-pane"> <div class="umb-pane">
<p class="abstract" ng-hide="success"> <p class="abstract" ng-hide="success">
Choose where to copy <strong>{{currentNode.name}}</strong> to in the tree structure below Choose where to copy <strong>{{currentNode.name}}</strong> to in the tree structure below
</p> </p>
<div class="umb-loader-wrapper" ng-show="busy"> <div class="umb-loader-wrapper" ng-show="busy">
<div class="umb-loader"></div> <div class="umb-loader"></div>
</div> </div>
<div ng-show="error"> <div ng-show="error">
<h5 class="text-error">{{error.errorMsg}}</h5> <h5 class="text-error">{{error.errorMsg}}</h5>
<p class="text-error">{{error.data.message}}</p> <p class="text-error">{{error.data.message}}</p>
</div> </div>
<div class="alert alert-success" ng-show="success"> <div class="alert alert-success" ng-show="success">
<p> <p>
<strong>{{currentNode.name}}</strong> was copied to <strong>{{currentNode.name}}</strong> was copied to
<strong>{{target.name}}</strong> <strong>{{target.name}}</strong>
</p> </p>
<button class="btn btn-primary" ng-click="nav.hideDialog()">Ok</button> <button class="btn btn-primary" ng-click="nav.hideDialog()">Ok</button>
</div> </div>
<div ng-hide="success"> <div ng-hide="success">
<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="false" hideheader="false"
hideoptions="true" hideoptions="true"
isdialog="true" isdialog="true"
eventhandler="dialogTreeEventHandler" eventhandler="dialogTreeEventHandler"
enablecheckboxes="true"> enablecheckboxes="true">
</umb-tree> </umb-tree>
</div> </div>
<umb-pane> <umb-pane>
<umb-control-group label="Relate to original"> <umb-control-group label="Relate to original">
<input type="checkbox" ng-model="$parent.$parent.relateToOriginal" /> <input type="checkbox" ng-model="$parent.$parent.relateToOriginal" />
</umb-control-group> </umb-control-group>
</umb-pane> </umb-pane>
<umb-pane> <umb-pane>
<umb-control-group label="Include descendants"> <umb-control-group label="Include descendants">
<input type="checkbox" ng-model="$parent.$parent.recursive" /> <input type="checkbox" ng-model="$parent.$parent.recursive" />
</umb-control-group> </umb-control-group>
</umb-pane> </umb-pane>
</div> </div>
</div> </div>
</div> </div>
<div class="umb-dialog-footer btn-toolbar umb-btn-toolbar" ng-hide="success"> <div class="umb-dialog-footer btn-toolbar umb-btn-toolbar" ng-hide="success">
<a class="btn btn-link" ng-click="nav.hideDialog()" ng-if="!busy"> <a class="btn btn-link" ng-click="nav.hideDialog()" ng-if="!busy">
<localize key="general_cancel">Cancel</localize> <localize key="general_cancel">Cancel</localize>
</a> </a>
<button class="btn btn-primary" ng-click="copy()" ng-disabled="busy"> <button class="btn btn-primary" ng-click="copy()" ng-disabled="busy">
<localize key="actions_copy">Copy</localize> <localize key="actions_copy">Copy</localize>
</button> </button>
</div> </div>
</div> </div>
@@ -1,45 +1,45 @@
<div class="umb-dialog-body with-footer" ng-controller="Umbraco.Editors.Content.CreateController" ng-cloak> <div class="umb-dialog-body with-footer" ng-controller="Umbraco.Editors.Content.CreateController" ng-cloak>
<div class="umb-pane"> <div class="umb-pane">
<h5><localize key="create_createUnder">Create a page under</localize> {{currentNode.name}}</h5> <h5><localize key="create_createUnder">Create a page under</localize> {{currentNode.name}}</h5>
<p class="abstract" ng-if="allowedTypes && allowedTypes.length === 0"> <p class="abstract" ng-if="allowedTypes && allowedTypes.length === 0">
<localize key="create_noDocumentTypes" /> <localize key="create_noDocumentTypes" />
</p> </p>
<ul class="umb-actions umb-actions-child"> <ul class="umb-actions umb-actions-child">
<li ng-repeat="docType in allowedTypes | orderBy:'name':false"> <li ng-repeat="docType in allowedTypes | orderBy:'name':false">
<a href="#content/content/edit/{{currentNode.id}}?doctype={{docType.alias}}&create=true" ng-click="nav.hideNavigation()"> <a href="#content/content/edit/{{currentNode.id}}?doctype={{docType.alias}}&create=true" ng-click="nav.hideNavigation()">
<i class="large {{docType.icon}}"></i> <i class="large {{docType.icon}}"></i>
<span class="menu-label"> <span class="menu-label">
{{docType.name}} {{docType.name}}
<small> <small>
{{docType.description}} {{docType.description}}
</small> </small>
</span> </span>
</a> </a>
</li> </li>
<!-- <!--
<li class="add"> <li class="add">
<a href="#settings/documenttype/create/{{currentNode.id}}?doctype={{docType.alias}}&create=true" ng-click="nav.hideNavigation()"> <a href="#settings/documenttype/create/{{currentNode.id}}?doctype={{docType.alias}}&create=true" ng-click="nav.hideNavigation()">
<i class="large icon-add"></i> <i class="large icon-add"></i>
<span class="menu-label"> <span class="menu-label">
Create a new document type Create a new document type
<small> <small>
Design and configure a new document type Design and configure a new document type
</small> </small>
</span> </span>
</a> </a>
</li> --> </li> -->
</ul> </ul>
</div> </div>
</div> </div>
<div class="umb-dialog-footer btn-toolbar umb-btn-toolbar"> <div class="umb-dialog-footer btn-toolbar umb-btn-toolbar">
<button class="btn" ng-click="nav.hideDialog(true)"> <button class="btn" ng-click="nav.hideDialog(true)">
<localize key="buttons_somethingElse">Do something else</localize> <localize key="buttons_somethingElse">Do something else</localize>
</button> </button>
</div> </div>
@@ -1,12 +1,12 @@
<div class="umb-dialog umb-pane" ng-controller="Umbraco.Editors.Content.DeleteController"> <div class="umb-dialog umb-pane" ng-controller="Umbraco.Editors.Content.DeleteController">
<div class="umb-dialog-body" auto-scale="90"> <div class="umb-dialog-body" auto-scale="90">
<p class="umb-abstract"> <p class="umb-abstract">
<localize key="defaultdialogs_confirmdelete">Are you sure you want to delete</localize> <strong>{{currentNode.name}}</strong> ? <localize key="defaultdialogs_confirmdelete">Are you sure you want to delete</localize> <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>
@@ -1,17 +1,17 @@
<div class="umb-dialog" ng-controller="Umbraco.Editors.Content.EmptyRecycleBinController"> <div class="umb-dialog" ng-controller="Umbraco.Editors.Content.EmptyRecycleBinController">
<div class="umb-dialog-body"> <div class="umb-dialog-body">
<umb-pane> <umb-pane>
<div class="umb-loader-wrapper" ng-show="busy"> <div class="umb-loader-wrapper" ng-show="busy">
<div class="umb-loader"></div> <div class="umb-loader"></div>
</div> </div>
<p class="umb-abstract"> <p class="umb-abstract">
<localize key="defaultdialogs_recycleBinWarning">When items are deleted from the recycle bin, they will be gone forever</localize>. <localize key="defaultdialogs_recycleBinWarning">When items are deleted from the recycle bin, they will be gone forever</localize>.
<localize key="general_areyousure">Are you sure</localize>? <localize key="general_areyousure">Are you sure</localize>?
</p> </p>
<umb-confirm on-confirm="performDelete" on-cancel="cancel"> <umb-confirm on-confirm="performDelete" on-cancel="cancel">
</umb-confirm> </umb-confirm>
</umb-pane> </umb-pane>
</div> </div>
</div> </div>
+62 -62
View File
@@ -1,63 +1,63 @@
<div ng-controller="Umbraco.Editors.Content.MoveController"> <div ng-controller="Umbraco.Editors.Content.MoveController">
<div class="umb-dialog-body"> <div class="umb-dialog-body">
<div class="umb-pane"> <div class="umb-pane">
<p class="abstract" ng-hide="success"> <p class="abstract" ng-hide="success">
Choose where to move <strong>{{currentNode.name}}</strong>&nbsp;to in the tree structure below Choose where to move <strong>{{currentNode.name}}</strong>&nbsp;to in the tree structure below
</p> </p>
<div class="umb-loader-wrapper" ng-show="busy"> <div class="umb-loader-wrapper" ng-show="busy">
<div class="umb-loader"></div> <div class="umb-loader"></div>
</div> </div>
<div ng-show="error"> <div ng-show="error">
<h5 class="text-error">{{error.errorMsg}}</h5> <h5 class="text-error">{{error.errorMsg}}</h5>
<p class="text-error">{{error.data.message}}</p> <p class="text-error">{{error.data.message}}</p>
</div> </div>
<div ng-show="success"> <div ng-show="success">
<h5 class="text-success"><strong>{{currentNode.name}}</strong> was moved underneath&nbsp;<strong>{{target.name}}</strong></h5> <h5 class="text-success"><strong>{{currentNode.name}}</strong> was moved underneath&nbsp;<strong>{{target.name}}</strong></h5>
<button class="btn btn-primary" ng-click="nav.hideDialog()">Ok</button> <button class="btn btn-primary" ng-click="nav.hideDialog()">Ok</button>
</div> </div>
<div ng-hide="success"> <div ng-hide="success">
<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="false" hideheader="false"
hideoptions="true" hideoptions="true"
isdialog="true" isdialog="true"
eventhandler="dialogTreeEventHandler" eventhandler="dialogTreeEventHandler"
enablecheckboxes="true"> enablecheckboxes="true">
</umb-tree> </umb-tree>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="umb-dialog-footer btn-toolbar umb-btn-toolbar" ng-hide="success"> <div class="umb-dialog-footer btn-toolbar umb-btn-toolbar" ng-hide="success">
<a class="btn btn-link" ng-click="nav.hideDialog()" ng-if="!busy"> <a class="btn btn-link" ng-click="nav.hideDialog()" ng-if="!busy">
<localize key="general_cancel">Cancel</localize> <localize key="general_cancel">Cancel</localize>
</a> </a>
<button class="btn btn-primary" ng-click="move()" ng-disabled="busy"> <button class="btn btn-primary" ng-click="move()" ng-disabled="busy">
<localize key="actions_move">Move</localize> <localize key="actions_move">Move</localize>
</button> </button>
</div> </div>
</div> </div>
@@ -1,16 +1,16 @@
<umb-editor-view ng-controller="Umbraco.Editors.Content.RecycleBinController"> <umb-editor-view ng-controller="Umbraco.Editors.Content.RecycleBinController">
<form> <form>
<umb-editor-header name="page.name" <umb-editor-header name="page.name"
name-locked="page.nameLocked" name-locked="page.nameLocked"
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>
<div ng-include="listViewPath"></div> <div ng-include="listViewPath"></div>
</umb-editor-container> </umb-editor-container>
</form> </form>
</umb-editor-view> </umb-editor-view>
@@ -1,18 +1,18 @@
<form novalidate name="passwordForm" <form novalidate name="passwordForm"
ng-controller="Umbraco.Dashboard.StartupChangePasswordController" ng-controller="Umbraco.Dashboard.StartupChangePasswordController"
ng-submit="changePassword()" ng-submit="changePassword()"
val-form-manager> val-form-manager>
<h3><localize key="user_changePassword">Change password</localize></h3> <h3><localize key="user_changePassword">Change password</localize></h3>
<umb-pane> <umb-pane>
<umb-editor model="changePasswordModel"></umb-editor> <umb-editor model="changePasswordModel"></umb-editor>
<umb-control-group hideLabel="1"> <umb-control-group hideLabel="1">
<button class="btn btn-primary"> <button class="btn btn-primary">
<localize key="user_change">Change</localize> <localize key="user_change">Change</localize>
</button> </button>
</umb-control-group> </umb-control-group>
</umb-pane> </umb-pane>
</form> </form>
@@ -1,44 +1,95 @@
<div class="umb-dashboard-grid" ng-controller="Umbraco.Dashboard.StartUpDynamicContentController as vm">
<div style="max-width: 1200px"> <umb-load-indicator ng-if="vm.loading"></umb-load-indicator>
<h3><strong>Welcome to The Friendly CMS</strong></h3>
<p style="font-size: 16px; line-height: 1.5; margin-bottom: 30px; max-width: 760px;">Thank you for choosing Umbraco - we think this could be the beginning of something beautiful. While it may feel overwhelming at first, we've done a lot to make the learning curve as smooth and fast as possible:</p>
<div class="row"> <div class="row clearfix" ng-if="vm.dashboard">
<div class="span4"> <!-- Sections -->
<a href="http://umbraco.tv/?utm_source=core&utm_medium=dashboard&utm_content=image&utm_campaign=tv" target="_blank" class="nounderline"> <div class="grid-section" ng-repeat="section in vm.dashboard.sections">
<img src="views/dashboard/default/umbracotv.png" alt="Umbraco.TV - Hours of Umbraco Video Tutorials" style="margin: 10px 0 10px 0"/> <div class="{{'span' + section.grid + ' column dash-section'}}">
</a>
<!-- rows -->
<div class="row clearfix dash-row" ng-repeat="row in section.rows">
<div class="dash-inner-row">
<a href="http://umbraco.tv/?utm_source=core&utm_medium=dashboard&utm_content=header&utm_campaign=tv" target="_blank" class="btn-link -underline"> <!-- areas -->
<h4> <strong>Umbraco.TV - Learn from the source!</strong> </h4> <div ng-repeat="area in row.areas"
</a> class="{{'span' + area.grid + ' column dash-area'}}">
<div class="dash-inner-area">
<p style="line-height: 1.5;"> <!-- Controls -->
Umbraco.TV will help you go from zero to Umbraco <div ng-repeat="control in area.controls" class="dash-control dash-control-{{control.alias}}">
hero at a pace that suits you. Our easy to follow <div class="dash-inner-control">
online training videos will give you the fundamental <div ng-bind-html-unsafe="control.html"></div>
knowledge to start building awesome Umbraco websites. </div>
</p> </div>
<!-- Controls end -->
</div>
</div>
<!-- Area end -->
</div>
</div>
</div>
<!-- Section end -->
</div>
</div> </div>
<!-- grid container end -->
<div class="span4 offset1">
<a href="http://our.umbraco.org/?utm_source=core&utm_medium=dashboard&utm_content=image&utm_campaign=our" target="_blank" class="nounderline"> <!-- Default content in case we cannot fetch content from the outside -->
<img src="views/dashboard/default/ourumbraco.png" alt="Our Umbraco" style="margin: 10px 0 10px 0"/> <div style="max-width: 1200px" ng-if="vm.showDefault">
</a> <h3><strong>Welcome to The Friendly CMS</strong></h3>
<p style="font-size: 16px; line-height: 1.5; margin-bottom: 30px; max-width: 760px;">
<span>Thank you for choosing Umbraco - we think this could be the beginning of something beautiful. While it may feel overwhelming at first, we've done a lot to make the learning curve as smooth and fast as possible.</span>
</p>
<h4>Find out more:</h4>
<ul>
<li>Find the answers to your Umbraco questions in <a href="https://our.umbraco.org/documentation/" target="_blank" class="btn-link-underline">our Documentation</a></li>
<li>Ask a question in the <a href="https://our.umbraco.org" target="_blank" class="btn-link-underline">Community Forum</a></li>
<li>Find <a href="https://our.umbraco.org/projects" target="_blank" class="btn-link-underline">an add-on package</a> to help you get going quickly</li>
<li>Watch <a href="https://umbraco.tv" class="btn-link-underline">our tutorial videos</a> (some are free, some require a subscription)</li>
<li>Find out about <a href="https://umbraco.com/products-and-support" target="_blank" class="btn-link-underline">our productivity boosting tools and commercial support</a></li>
<li>Find out about <a href="https://umbraco.com/products/training" target="_blank" class="btn-link-underline">real-life training and certification opportunities</a></li>
</ul>
<a href="http://our.umbraco.org/?utm_source=core&utm_medium=dashboard&utm_content=header&utm_campaign=our" target="_blank" class="btn-link -underline"> <div class="row">
<h4><strong>Our Umbraco - The Friendliest Community</strong></h4> <div class="span4">
</a> <a href="http://umbraco.tv/?utm_source=core&utm_medium=dashboard&utm_content=image&utm_campaign=tv" target="_blank" class="nounderline">
<img src="views/dashboard/default/umbracotv.png" alt="Umbraco.TV - Hours of Umbraco Video Tutorials" style="margin: 10px 0 10px 0" />
</a>
<p style="line-height: 1.5;">
Our Umbraco - the official community site is your one
stop for everything Umbraco. Whether you need a
question answered or looking for cool plugins, the
worlds best community is just a click away.
</p>
</div>
</div>
</div> <a href="http://umbraco.tv/?utm_source=core&utm_medium=dashboard&utm_content=header&utm_campaign=tv" target="_blank" class="btn-link -underline">
<h4> <strong>Umbraco.TV - Learn from the source!</strong> </h4>
</a>
<p style="line-height: 1.5;">
Umbraco.TV will help you go from zero to Umbraco
hero at a pace that suits you. Our easy to follow
online training videos will give you the fundamental
knowledge to start building awesome Umbraco websites.
</p>
</div>
<div class="span4 offset1">
<a href="http://our.umbraco.org/?utm_source=core&utm_medium=dashboard&utm_content=image&utm_campaign=our" target="_blank" class="nounderline">
<img src="views/dashboard/default/ourumbraco.png" alt="Our Umbraco" style="margin: 10px 0 10px 0" />
</a>
<a href="http://our.umbraco.org/?utm_source=core&utm_medium=dashboard&utm_content=header&utm_campaign=our" target="_blank" class="btn-link -underline">
<h4><strong>Our Umbraco - The Friendliest Community</strong></h4>
</a>
<p style="line-height: 1.5;">
Our Umbraco - the official community site is your one
stop for everything Umbraco. Whether you need a
question answered or looking for cool plugins, the
worlds best community is just a click away.
</p>
</div>
</div>
</div>
</div>
@@ -1,18 +1,18 @@
<h3>Hours of Umbraco training videos are only a click away</h3> <h3>Hours of Umbraco training videos are only a click away</h3>
<p>Want to master Umbraco? Spend a couple of minutes learning some best practices by watching one of these videos about using Umbraco. And visit <a href="http://umbraco.tv" target="_blank">umbraco.tv</a> for even more Umbraco videos</p> <p>Want to master Umbraco? Spend a couple of minutes learning some best practices by watching one of these videos about using Umbraco. And visit <a href="http://umbraco.tv" target="_blank">umbraco.tv</a> for even more Umbraco videos</p>
<h4>To get you started:</h4> <h4>To get you started:</h4>
<div class="row-fluid" <div class="row-fluid"
ng-init="init('http://umbraco.tv/videos/implementor/chapterrss?sort=no')" ng-init="init('http://umbraco.tv/videos/implementor/chapterrss?sort=no')"
ng-controller="Umbraco.Dashboard.StartupVideosController"> ng-controller="Umbraco.Dashboard.StartupVideosController">
<ul class="thumbnails"> <ul class="thumbnails">
<li class="span2" ng-repeat="video in videos"> <li class="span2" ng-repeat="video in videos">
<div class="thumbnail" style="margin-right: 20px"> <div class="thumbnail" style="margin-right: 20px">
<a target="_blank" href="{{video.link}}" title="{{video.title}}"> <a target="_blank" href="{{video.link}}" title="{{video.title}}">
<img ng-src="{{video.thumbnail}}" alt="{{video.title}}"> <img ng-src="{{video.thumbnail}}" alt="{{video.title}}">
</a> </a>
</div> </div>
</li> </li>
</ul> </ul>
</div> </div>
@@ -1,20 +1,20 @@
<h3>Hours of Umbraco training videos are only a click away</h3> <h3>Hours of Umbraco training videos are only a click away</h3>
<p>Want to master Umbraco? Spend a couple of minutes learning some best practices by watching one of these videos about using Umbraco. And visit <a class="btn-link -underline" href="http://umbraco.tv" target="_blank">umbraco.tv</a> for even more Umbraco videos</p> <p>Want to master Umbraco? Spend a couple of minutes learning some best practices by watching one of these videos about using Umbraco. And visit <a class="btn-link -underline" href="http://umbraco.tv" target="_blank">umbraco.tv</a> for even more Umbraco videos</p>
<div class="row-fluid" <div class="row-fluid"
ng-init="init('http://umbraco.tv/videos/developer/chapterrss?sort=no')" ng-init="init('http://umbraco.tv/videos/developer/chapterrss?sort=no')"
ng-controller="Umbraco.Dashboard.StartupVideosController"> ng-controller="Umbraco.Dashboard.StartupVideosController">
<ul class="thumbnails" > <ul class="thumbnails" >
<li class="span2" ng-repeat="video in videos"> <li class="span2" ng-repeat="video in videos">
<div class="thumbnail" style="margin-right: 20px; padding: 20px;"> <div class="thumbnail" style="margin-right: 20px; padding: 20px;">
<a class="btn-link -underline" target="_blank" href="{{video.link}}" title="{{video.title}}"> <a class="btn-link -underline" target="_blank" href="{{video.link}}" title="{{video.title}}">
<img ng-src="{{video.thumbnail}}" alt="{{video.title}}"> <img ng-src="{{video.thumbnail}}" alt="{{video.title}}">
</a> </a>
<a target="_blank" href="{{video.link}}" title="{{video.title}}"> <a target="_blank" href="{{video.link}}" title="{{video.title}}">
<div style="font-weight: bold; text-align: center; margin: 20px 0 0;">{{video.title}}</div> <div style="font-weight: bold; text-align: center; margin: 20px 0 0;">{{video.title}}</div>
</a> </a>
</div> </div>
</li> </li>
</ul> </ul>
</div> </div>
@@ -77,7 +77,7 @@
<a class="umb-table-body__link" href="{{redirectUrl.destinationUrl}}" target="_blank" title="{{redirectUrl.destinationUrl}}">{{redirectUrl.destinationUrl}}</a> <a class="umb-table-body__link" href="{{redirectUrl.destinationUrl}}" target="_blank" title="{{redirectUrl.destinationUrl}}">{{redirectUrl.destinationUrl}}</a>
</div> </div>
<button type="button" class="umb-era-button -gray umb-button--s" ng-click="vm.removeRedirect(redirectUrl)"><localize key="redirectUrls_removeButton">Remove</localize></button> <button type="button" class="umb-era-button umb-button--s -red" ng-click="vm.removeRedirect(redirectUrl)"><localize key="redirectUrls_removeButton">Remove</localize></button>
</div> </div>
</div> </div>
@@ -1,18 +1,18 @@
<h3>Hours of Umbraco training videos are only a click away</h3> <h3>Hours of Umbraco training videos are only a click away</h3>
<p>Want to master Umbraco? Spend a couple of minutes learning some best practices by watching one of these videos about using Umbraco. And visit <a href="http://umbraco.tv" target="_blank">umbraco.tv</a> for even more Umbraco videos</p> <p>Want to master Umbraco? Spend a couple of minutes learning some best practices by watching one of these videos about using Umbraco. And visit <a href="http://umbraco.tv" target="_blank">umbraco.tv</a> for even more Umbraco videos</p>
<h4>To get you started:</h4> <h4>To get you started:</h4>
<div class="row-fluid" <div class="row-fluid"
ng-init="init('http://umbraco.tv/videos/implementor/chapterrss?sort=no')" ng-init="init('http://umbraco.tv/videos/implementor/chapterrss?sort=no')"
ng-controller="Umbraco.Dashboard.StartupVideosController"> ng-controller="Umbraco.Dashboard.StartupVideosController">
<ul class="thumbnails" > <ul class="thumbnails" >
<li class="span2" ng-repeat="video in videos"> <li class="span2" ng-repeat="video in videos">
<div class="thumbnail" style="margin-right: 20px"> <div class="thumbnail" style="margin-right: 20px">
<a target="_blank" href="{{video.link}}" title="{{video.title}}"> <a target="_blank" href="{{video.link}}" title="{{video.title}}">
<img ng-src="{{video.thumbnail}}" alt="{{video.title}}"> <img ng-src="{{video.thumbnail}}" alt="{{video.title}}">
</a> </a>
</div> </div>
</li> </li>
</ul> </ul>
</div> </div>
@@ -1,18 +1,18 @@
<h3>Hours of Umbraco training videos are only a click away</h3> <h3>Hours of Umbraco training videos are only a click away</h3>
<p>Want to master Umbraco? Spend a couple of minutes learning some best practices by watching one of these videos about using Umbraco. And visit <a href="http://umbraco.tv" target="_blank">umbraco.tv</a> for even more Umbraco videos</p> <p>Want to master Umbraco? Spend a couple of minutes learning some best practices by watching one of these videos about using Umbraco. And visit <a href="http://umbraco.tv" target="_blank">umbraco.tv</a> for even more Umbraco videos</p>
<h4>To get you started:</h4> <h4>To get you started:</h4>
<div class="row-fluid" <div class="row-fluid"
ng-init="init('http://umbraco.tv/videos/implementor/chapterrss?sort=no')" ng-init="init('http://umbraco.tv/videos/implementor/chapterrss?sort=no')"
ng-controller="Umbraco.Dashboard.StartupVideosController"> ng-controller="Umbraco.Dashboard.StartupVideosController">
<ul class="thumbnails" > <ul class="thumbnails" >
<li class="span2" ng-repeat="video in videos"> <li class="span2" ng-repeat="video in videos">
<div class="thumbnail" style="margin-right: 20px"> <div class="thumbnail" style="margin-right: 20px">
<a target="_blank" href="{{video.link}}" title="{{video.title}}"> <a target="_blank" href="{{video.link}}" title="{{video.title}}">
<img ng-src="{{video.thumbnail}}" alt="{{video.title}}"> <img ng-src="{{video.thumbnail}}" alt="{{video.title}}">
</a> </a>
</div> </div>
</li> </li>
</ul> </ul>
</div> </div>
@@ -1,71 +1,71 @@
<div ng-controller="Umbraco.Editors.DataType.EditController"> <div ng-controller="Umbraco.Editors.DataType.EditController">
<umb-load-indicator ng-if="page.loading"></umb-load-indicator> <umb-load-indicator ng-if="page.loading"></umb-load-indicator>
<form name="contentForm" <form name="contentForm"
ng-submit="save()" ng-submit="save()"
novalidate novalidate
val-form-manager> val-form-manager>
<umb-editor-view ng-if="!page.loading"> <umb-editor-view ng-if="!page.loading">
<umb-editor-header <umb-editor-header
menu="page.menu" menu="page.menu"
name="content.name" name="content.name"
name-locked="page.nameLocked" name-locked="page.nameLocked"
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 class="form-horizontal"> <umb-editor-container class="form-horizontal">
<umb-property property="properties.selectedEditor"> <umb-property property="properties.selectedEditor">
<div> <div>
<select name="selectedEditor" <select name="selectedEditor"
ng-model="content.selectedEditor" ng-model="content.selectedEditor"
required required
ng-options="e.alias as e.name for e in content.availableEditors"></select> ng-options="e.alias as e.name for e in content.availableEditors"></select>
<span class="help-inline" val-msg-for="selectedEditor" val-toggle-msg="required">Required</span> <span class="help-inline" val-msg-for="selectedEditor" val-toggle-msg="required">Required</span>
</div> </div>
</umb-property> </umb-property>
<umb-property property="properties.selectedEditorId"> <umb-property property="properties.selectedEditorId">
<div>{{content.selectedEditor}}</div> <div>{{content.selectedEditor}}</div>
</umb-property> </umb-property>
<umb-property <umb-property
property="preValue" property="preValue"
ng-repeat="preValue in preValues"> ng-repeat="preValue in preValues">
<umb-editor model="preValue" is-pre-value="true"></umb-editor> <umb-editor model="preValue" is-pre-value="true"></umb-editor>
</umb-property> </umb-property>
</umb-editor-container> </umb-editor-container>
<umb-editor-footer> <umb-editor-footer>
<umb-editor-footer-content-right> <umb-editor-footer-content-right>
<umb-button <umb-button
type="submit" type="submit"
button-style="success" button-style="success"
state="page.saveButtonState" state="page.saveButtonState"
shortcut="ctrl+s" shortcut="ctrl+s"
label="Save" label="Save"
label-key="buttons_save"> label-key="buttons_save">
</umb-button> </umb-button>
</umb-editor-footer-content-right> </umb-editor-footer-content-right>
</umb-editor-footer> </umb-editor-footer>
</umb-editor-view> </umb-editor-view>
</form> </form>
</div> </div>
@@ -1,19 +1,19 @@
<ng-form name="contentNameForm"> <ng-form name="contentNameForm">
<div class="umb-headline-editor-wrapper" ng-class="{'ng-invalid': contentNameForm.name.$invalid}"> <div class="umb-headline-editor-wrapper" ng-class="{'ng-invalid': contentNameForm.name.$invalid}">
<input type="text" <input type="text"
ng-disabled="ngDisabled" ng-disabled="ngDisabled"
name="name" name="name"
localize="placeholder" localize="placeholder"
class="umb-headline" class="umb-headline"
select-on-focus select-on-focus
placeholder="{{placeholder}}" placeholder="{{placeholder}}"
ng-model="model" ng-model="model"
required required
val-server-field="Name"/> val-server-field="Name"/>
<span class="help-inline" val-msg-for="name" val-toggle-msg="required">Required</span> <span class="help-inline" val-msg-for="name" val-toggle-msg="required">Required</span>
<span class="help-inline" val-msg-for="name" val-toggle-msg="valServerField">{{contentNameForm.name.errorMsg}}</span> <span class="help-inline" val-msg-for="name" val-toggle-msg="valServerField">{{contentNameForm.name.errorMsg}}</span>
</div> </div>
</ng-form> </ng-form>
@@ -1,14 +1,14 @@
<div class="umb-panel-header"> <div class="umb-panel-header">
<div class="row-fluid"> <div class="row-fluid">
<div ng-transclude></div> <div ng-transclude></div>
<ul ng-show="showTabs" class="nav nav-tabs umb-nav-tabs span12 -padding-left"> <ul ng-show="showTabs" class="nav nav-tabs umb-nav-tabs span12 -padding-left">
<li ng-class="{'tab-error': tabHasError}" ng-repeat="tab in visibleTabs" val-tab> <li ng-class="{'tab-error': tabHasError}" ng-repeat="tab in visibleTabs" val-tab>
<a href="#tab{{tab.id}}" data-toggle="tab">{{ tab.label }}</a> <a href="#tab{{tab.id}}" data-toggle="tab">{{ tab.label }}</a>
</li> </li>
</ul> </ul>
</div> </div>
</div> </div>
@@ -1,38 +1,38 @@
<div class="umb-dialog" style="width: 500px" ng-switch on="model.complete"> <div class="umb-dialog" style="width: 500px" ng-switch on="model.complete">
<form name="sortForm" ng-submit="performSort()" ng-switch-when="false"> <form name="sortForm" ng-submit="performSort()" ng-switch-when="false">
<div class="umb-dialog-body" auto-scale="90"> <div class="umb-dialog-body" auto-scale="90">
<p class="umb-abstract">Sort children of {{viewModel.name}}</p> <p class="umb-abstract">Sort children of {{viewModel.name}}</p>
<table class="table umb-table"> <table class="table umb-table">
<thead> <thead>
<tr> <tr>
<td>Name</td> <td>Name</td>
<td>Last Update</td> <td>Last Update</td>
<td>Index</td> <td>Index</td>
</thead> </thead>
<tbody ui-sortable="sortableOptions" ng-model="model.itemsToSort"> <tbody ui-sortable="sortableOptions" ng-model="model.itemsToSort">
<tr ng-repeat="item in model.itemsToSort"> <tr ng-repeat="item in model.itemsToSort">
<td>{{item.column1}}</td> <td>{{item.column1}}</td>
<td>{{item.column2}}</td> <td>{{item.column2}}</td>
<td>{{item.column3}}</td> <td>{{item.column3}}</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
</div> </div>
<div class="btn-toolbar umb-btn-toolbar"> <div class="btn-toolbar umb-btn-toolbar">
<button type="button" class="btn" ng-click="handleCancel()">Cancel</button> <button type="button" class="btn" ng-click="handleCancel()">Cancel</button>
<button type="submit" class="btn btn-primary">Sort</button> <button type="submit" class="btn btn-primary">Sort</button>
</div> </div>
</form> </form>
<div ng-switch-when="true"> <div ng-switch-when="true">
<div class="alert alert-success"> <div class="alert alert-success">
{{model.successMsg}} {{model.successMsg}}
</div> </div>
<div class="btn-toolbar umb-btn-toolbar"> <div class="btn-toolbar umb-btn-toolbar">
<button class="btn" ng-click="handleOk()">{{model.okButton}}</button> <button class="btn" ng-click="handleOk()">{{model.okButton}}</button>
</div> </div>
</div> </div>
</div> </div>
@@ -1,12 +1,12 @@
<div id="login" ng-show="!authenticated" ng-animate="'slide'" ng-cloak> <div id="login" ng-show="!authenticated" ng-animate="'slide'" ng-cloak>
<div class="form"> <div class="form">
<h1>Happy {{today}}!, log in below</h1> <h1>Happy {{today}}!, log in below</h1>
<div class="control-group"> <div class="control-group">
<input type="text" ng-model="login" class="input-xlarge" placeholder="Enter your username" /> <input type="text" ng-model="login" class="input-xlarge" placeholder="Enter your username" />
</div> </div>
<div class="control-group"> <div class="control-group">
<input type="password" ng-model="password" class="input-xlarge" placeholder="Enter your password" /> <input type="password" ng-model="password" class="input-xlarge" placeholder="Enter your password" />
</div> </div>
<input type="button" ng-click="signin()" class="btn" value="Login" /> <input type="button" ng-click="signin()" class="btn" value="Login" />
</div> </div>
</div> </div>
@@ -1,5 +1,5 @@
<div class="umb-panel-body umb-scrollable row-fluid"> <div class="umb-panel-body umb-scrollable row-fluid">
<div class="tab-content form-horizontal" ng-transclude> <div class="tab-content form-horizontal" ng-transclude>
</div> </div>
</div> </div>
@@ -1,8 +1,8 @@
<div class="umb-upload-drop-zone"> <div class="umb-upload-drop-zone">
<div class="info"> <div class="info">
<i class="icon icon-parachute-drop"></i> <i class="icon icon-parachute-drop"></i>
<p> <p>
<localize key="media_dropFilesHere">Drop your files here...</localize> <localize key="media_dropFilesHere">Drop your files here...</localize>
</p> </p>
</div> </div>
</div> </div>
@@ -1,4 +1,4 @@
<umb-groups-builder <umb-groups-builder
model="model" model="model"
content-type="documentType"> content-type="documentType">
</umb-groups-builder> </umb-groups-builder>
+50 -50
View File
@@ -1,50 +1,50 @@
<div class="umb-dialog-body with-footer" ng-controller="Umbraco.Editors.Media.CreateController"> <div class="umb-dialog-body with-footer" ng-controller="Umbraco.Editors.Media.CreateController">
<div class="umb-pane"> <div class="umb-pane">
<h5><localize key="create_createUnder">Create under</localize> {{currentNode.name}}</h5> <h5><localize key="create_createUnder">Create under</localize> {{currentNode.name}}</h5>
<p class="abstract" ng-hide="allowedTypes"> <p class="abstract" ng-hide="allowedTypes">
<localize key="create_noMediaTypes" /> <localize key="create_noMediaTypes" />
</p> </p>
<ul class="umb-actions"> <ul class="umb-actions">
<li class="action"> <li class="action">
<ul class="umb-actions-child"> <ul class="umb-actions-child">
<li ng-repeat="docType in allowedTypes"> <li ng-repeat="docType in allowedTypes">
<a href="#media/media/edit/{{currentNode.id}}?doctype={{docType.alias}}&create=true" ng-click="nav.hideNavigation()"> <a href="#media/media/edit/{{currentNode.id}}?doctype={{docType.alias}}&create=true" ng-click="nav.hideNavigation()">
<i class="large {{docType.icon}}"></i> <i class="large {{docType.icon}}"></i>
<span class="menu-label"> <span class="menu-label">
{{docType.name}} {{docType.name}}
<small> <small>
{{docType.description}} {{docType.description}}
</small> </small>
</span> </span>
</a> </a>
</li> </li>
<!-- <!--
<li class="add"> <li class="add">
<a href="#settings/documenttype/create/{{currentNode.id}}?doctype={{docType.alias}}&create=true" ng-click="nav.hideNavigation()"> <a href="#settings/documenttype/create/{{currentNode.id}}?doctype={{docType.alias}}&create=true" ng-click="nav.hideNavigation()">
<i class="icon-large icon-plus"></i> <i class="icon-large icon-plus"></i>
<span class="menu-label"> <span class="menu-label">
Create a new media type Create a new media type
<small> <small>
Design and configure a new media type Design and configure a new media type
</small> </small>
</span> </span>
</a> </a>
</li> --> </li> -->
</ul> </ul>
</li> </li>
</ul> </ul>
</div> </div>
</div> </div>
<div class="umb-dialog-footer btn-toolbar umb-btn-toolbar"> <div class="umb-dialog-footer btn-toolbar umb-btn-toolbar">
<button class="btn" ng-click="nav.hideDialog(true)"> <button class="btn" ng-click="nav.hideDialog(true)">
<localize key="buttons_somethingElse">Do something else</localize> <localize key="buttons_somethingElse">Do something else</localize>
</button> </button>
</div> </div>
+75 -75
View File
@@ -1,75 +1,75 @@
<div ng-controller="Umbraco.Editors.Media.EditController"> <div ng-controller="Umbraco.Editors.Media.EditController">
<umb-load-indicator ng-if="page.loading"></umb-load-indicator> <umb-load-indicator ng-if="page.loading"></umb-load-indicator>
<form novalidate name="contentForm" <form novalidate name="contentForm"
ng-submit="save()" ng-submit="save()"
val-form-manager> val-form-manager>
<umb-editor-view ng-if="!page.loading" umb-tabs> <umb-editor-view ng-if="!page.loading" umb-tabs>
<umb-editor-header <umb-editor-header
name="content.name" name="content.name"
tabs="content.tabs" tabs="content.tabs"
menu="page.menu" menu="page.menu"
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" class="form-horizontal"> <umb-tabs-content view="true" class="form-horizontal">
<umb-tab id="tab{{tab.id}}" rel="{{tab.id}}" ng-repeat="tab in content.tabs"> <umb-tab id="tab{{tab.id}}" rel="{{tab.id}}" ng-repeat="tab in content.tabs">
<umb-property property="property" ng-repeat="property in tab.properties"> <umb-property property="property" ng-repeat="property in tab.properties">
<umb-editor model="property"></umb-editor> <umb-editor model="property"></umb-editor>
</umb-property> </umb-property>
</umb-tab> </umb-tab>
</umb-tabs-content> </umb-tabs-content>
</umb-editor-container> </umb-editor-container>
<umb-editor-footer> <umb-editor-footer>
<umb-editor-footer-content-left> <umb-editor-footer-content-left>
<umb-breadcrumbs <umb-breadcrumbs
ng-if="ancestors && ancestors.length > 0" ng-if="ancestors && ancestors.length > 0"
ancestors="ancestors" ancestors="ancestors"
entity-type="media"> entity-type="media">
</umb-breadcrumbs> </umb-breadcrumbs>
</umb-editor-footer-content-left> </umb-editor-footer-content-left>
<umb-editor-footer-content-right> <umb-editor-footer-content-right>
<umb-button <umb-button
ng-if="page.listViewPath" ng-if="page.listViewPath"
type="link" type="link"
href="#{{page.listViewPath}}" href="#{{page.listViewPath}}"
label="Return to list" label="Return to list"
label-key="buttons_returnToList"> label-key="buttons_returnToList">
</umb-button> </umb-button>
<umb-button <umb-button
type="submit" type="submit"
label="Save" label="Save"
label-key="buttons_save" label-key="buttons_save"
button-style="success" button-style="success"
shortcut="ctrl+s" shortcut="ctrl+s"
state="page.saveButtonState"> state="page.saveButtonState">
</umb-button> </umb-button>
</umb-editor-footer-content-right> </umb-editor-footer-content-right>
</umb-editor-footer> </umb-editor-footer>
</umb-editor-view> </umb-editor-view>
</form> </form>
<div> <div>
+38 -38
View File
@@ -1,38 +1,38 @@
<div ng-controller="Umbraco.Editors.Media.MoveController"> <div ng-controller="Umbraco.Editors.Media.MoveController">
<div class="umb-dialog-body"> <div class="umb-dialog-body">
<div class="umb-pane"> <div class="umb-pane">
<p class="abstract" ng-hide="success"> <p class="abstract" ng-hide="success">
Choose where to move <strong>{{currentNode.name}}</strong> to in the tree structure below Choose where to move <strong>{{currentNode.name}}</strong> to in the tree structure below
</p> </p>
<div class="alert alert-error" ng-show="error" ng-cloak> <div class="alert alert-error" ng-show="error" ng-cloak>
<h4>{{error.errorMsg}}</h4> <h4>{{error.errorMsg}}</h4>
<p>{{error.data.Message}}</p> <p>{{error.data.Message}}</p>
</div> </div>
<div class="alert alert-success" ng-show="success" ng-cloak> <div class="alert alert-success" ng-show="success" ng-cloak>
<p><strong>{{currentNode.name}}</strong> was moved underneath <p><strong>{{currentNode.name}}</strong> was moved underneath
<strong>{{target.name}}</strong></p> <strong>{{target.name}}</strong></p>
<button class="btn btn-primary" ng-click="nav.hideDialog()">Ok</button> <button class="btn btn-primary" ng-click="nav.hideDialog()">Ok</button>
</div> </div>
<div ng-hide="success"> <div ng-hide="success">
<umb-tree section="media" <umb-tree section="media"
hideheader="false" hideheader="false"
hideoptions="true" hideoptions="true"
isdialog="true" isdialog="true"
eventhandler="dialogTreeEventHandler" eventhandler="dialogTreeEventHandler"
enablecheckboxes="true"> enablecheckboxes="true">
</umb-tree> </umb-tree>
</div> </div>
</div> </div>
</div> </div>
<div class="umb-dialog-footer btn-toolbar umb-btn-toolbar" ng-hide="success"> <div class="umb-dialog-footer btn-toolbar umb-btn-toolbar" ng-hide="success">
<a class="btn btn-link" ng-click="nav.hideDialog()">Cancel</a> <a class="btn btn-link" ng-click="nav.hideDialog()">Cancel</a>
<button class="btn btn-primary" ng-click="move()">Move</button> <button class="btn btn-primary" ng-click="move()">Move</button>
</div> </div>
</div> </div>

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