37 Commits

Author SHA1 Message Date
Stephan ec45bfb1d5 Fix the build script so it works! 2016-12-07 17:46:02 +01:00
Sebastiaan Janssen 1e5a959f25 7.5.5 upgrade was OK after all 2016-12-07 13:48:36 +01:00
Sebastiaan Janssen e1529e7f8f Html Agility Pack binding redirect missing 2016-12-07 13:31:04 +01:00
Sebastiaan Janssen 47123a7d0a Revert "Upgrade to Umbraco 7.5.5"
This reverts commit a0f27739b7.
2016-12-07 12:59:03 +01:00
Sebastiaan Janssen a0f27739b7 Upgrade to Umbraco 7.5.5 2016-12-07 11:57:20 +01:00
Sebastiaan Janssen 93474811f1 Replace all UmbracoContext.Current.Application with ApplicationContext.Current
UmbracoContext.Current == is based on a web request, if any code executes on a background thread or non-request thread then UmbracoContext.Current is null!
2016-11-25 21:04:49 +01:00
Sebastiaan Janssen 6f50fad596 Update all SqlHelper instanced to use the umbraco.Businesslogic version and wrapped them all in usings where necessary 2016-11-25 20:54:32 +01:00
Sebastiaan Janssen 538834dcc3 Update all SqlHelper instanced to use the umbraco.Businesslogic version and wrapped them all in usings where necessary 2016-11-25 20:49:30 +01:00
Sebastiaan Janssen 389ddaabb7 Disable Hangfire to see if that's causing the memory issues 2016-11-08 11:35:48 +01:00
Sebastiaan Janssen c7d2d53902 Get the email and name differently 2016-11-07 22:38:45 +01:00
Sebastiaan Janssen 367a98be56 Hangfire wasn't too happy with System.Net.MailAddress 2016-11-07 15:35:00 +01:00
Sebastiaan Janssen 2128fb883a Refactor MarkAsSolutionReminder to be a bit more efficient 2016-11-07 12:36:28 +01:00
Sebastiaan Janssen 729da39c87 Enable sending of mail 2016-10-31 13:39:14 +01:00
Sebastiaan Janssen 7e82ea86ec Little refactor and bugfix 2016-10-30 12:47:41 +01:00
Sebastiaan Janssen ddac31b8bc Ignore Hangfire route so Umbraco doesn't pick it up 2016-10-30 12:13:27 +01:00
Sebastiaan Janssen 491b5527ae Test solution reminder notification 2016-10-30 11:57:19 +01:00
Sebastiaan Janssen e63a9d4b16 Move docs from UaaS to UCloud 2016-10-27 21:11:00 +02:00
Sebastiaan Janssen 6dac0ad4e8 OUR-426 Rename Umbraco as a Service forum to Umbraco Cloud forum
#OUR-426 Fixed
2016-10-27 21:01:52 +02:00
Sebastiaan Janssen 19a737a770 OUR-424 Update "works on UaaS" to "works on Umbraco Cloud"
#OUR-424 Fixed
2016-10-27 20:42:21 +02:00
Simon Busborg c083576ef3 Fixed some cosmetic bugs on smaller devices. 2016-10-24 12:14:52 +02:00
Simon Busborg 82ba42b1aa Fixed button bug after flexbox 2016-10-24 09:22:19 +02:00
Sebastiaan Janssen f39bbc2979 Adds client to solution so task runner explorer can be used to build the client-side files in VS 2016-10-23 13:42:58 +02:00
Sebastiaan Janssen f04cf5bb40 Correcting the wrong version references 2016-10-22 12:51:37 +02:00
Sebastiaan Janssen 12727c7a50 Upgrade to 7.5.4 2016-10-22 11:56:47 +02:00
Sebastiaan Janssen 22a382ddad Added padding to wrong class 2016-10-17 14:04:56 +02:00
Sebastiaan Janssen 4e00102bad Some quick fixes for misaligned buttons 2016-10-17 13:53:31 +02:00
Sebastiaan Janssen 75039c5198 Correct Google tracking code 2016-10-17 13:23:11 +02:00
Sebastiaan Janssen cf048ebc01 Some small corrections to the download page 2016-10-17 09:30:42 +02:00
Sebastiaan Janssen ec6df31b0c Merge branch 'feature-release-downloadbutton' 2016-10-17 09:21:37 +02:00
Simon Busborg 9a36eea042 Removed header for double information about download 2016-10-10 12:04:10 +02:00
Simon Busborg e933ea81d7 Clean up of unused styling 2016-10-10 11:42:00 +02:00
Simon Busborg 7ffb0286e3 Fixes: OUR-404 Update release pages to have a far more prominent call to action for download and install instructions 2016-10-10 10:01:35 +02:00
Simon Busborg 100fa68a15 Added line-height to notifications 2016-10-10 10:00:31 +02:00
Simon Busborg 612de0e016 Updated buttons to fix Webkit bug 2016-10-10 10:00:14 +02:00
Simon Busborg 427e5b91af added flexbox to project 2016-10-10 09:59:54 +02:00
Simon Busborg 3299aee2bd Added a utility file with flexbox 2016-10-10 09:59:33 +02:00
Simon Busborg 39c1df41a7 Updated packages and dependency versions for gulp, outcommented “combine media queries” that broke the task runner 2016-10-10 09:59:19 +02:00
833 changed files with 135065 additions and 133143 deletions
+1
View File
@@ -63,3 +63,4 @@ OurUmbraco.Site/[Aa]ssets/js/app.min.js
OurUmbraco.Site/App_Data/migrations/*.txt OurUmbraco.Site/App_Data/migrations/*.txt
OurUmbraco.Site/apidocs/ OurUmbraco.Site/apidocs/
OurUmbraco.Site/App_Data/Documentation/ OurUmbraco.Site/App_Data/Documentation/
OurUmbraco.Site/App_Data/NotificationTest/
+3 -3
View File
@@ -1,4 +1,4 @@
<!doctype html> <!doctype html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]--> <!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]--> <!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]-->
<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]--> <!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]-->
@@ -1104,8 +1104,8 @@ namespace TestProject.Controllers
<option class="features" value="1150">our.umb dev forum - Features</option> <option class="features" value="1150">our.umb dev forum - Features</option>
<option class="general" value="5668">Core - General</option> <option class="general" value="5668">Core - General</option>
<option class="4.1feedback" value="5669">Core - 4.1 feedback</option> <option class="4.1feedback" value="5669">Core - 4.1 feedback</option>
<option class="generalquestions" value="73967">Umbraco as a Service - General Questions</option> <option class="generalquestions" value="73967">Umbraco Cloud - General Questions</option>
<option class="issues" value="73968">Umbraco as a Service - Issues</option> <option class="issues" value="73968">Umbraco Cloud - Issues</option>
</select> </select>
</div> </div>
+3 -3
View File
@@ -1,4 +1,4 @@
<!doctype html> <!doctype html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]--> <!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]--> <!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]-->
<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]--> <!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]-->
@@ -624,8 +624,8 @@ grunt</pre>
<div class="package-compatibility-versions"> <div class="package-compatibility-versions">
<div class="versions"> <div class="versions">
<span class="smiley joyous">Umbraco as a Service (Works)</span> <span class="smiley joyous">Umbraco Cloud (Works)</span>
<span class="smiley untested">Umbraco as a Service (Not working yet)</span> <span class="smiley untested">Umbraco Cloud (Not working yet)</span>
<span class="smiley untested"> 7.2.x (untested)</span> <span class="smiley untested"> 7.2.x (untested)</span>
<span class="smiley happy"> 7.1.x (91%)</span> <span class="smiley happy"> 7.1.x (91%)</span>
<span class="smiley joyous"> 7.0.x (100%)</span> <span class="smiley joyous"> 7.0.x (100%)</span>
+1 -1
View File
@@ -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;
} }
@@ -260,12 +260,12 @@
.topic { .topic {
flex: 0 0 100%; flex: 0 0 100%;
margin-bottom: .2rem; margin-bottom: 15px;
word-break: break-all;
@media (min-width: $md) { @media (min-width: $md) {
flex: 0 0 70%; flex: 1 1 70%;
padding-right: 3px; padding-right: 10px;
margin-bottom: 0;
} }
} }
@@ -276,7 +276,8 @@
flex: 0 0 100%; flex: 0 0 100%;
@media (min-width: $md) { @media (min-width: $md) {
flex: 0 0 30%; flex: 1 1 30%;
margin-left: auto;
flex-direction: column; flex-direction: column;
} }
@@ -287,7 +288,7 @@
margin: 0 .5rem 0 0; margin: 0 .5rem 0 0;
@media (min-width: $md) { @media (min-width: $md) {
margin: 0 0 .5rem 0; margin: 0 0 .5rem auto;
} }
} }
} }
@@ -526,6 +527,7 @@
display: inline-block; display: inline-block;
margin: 0px auto 50px; margin: 0px auto 50px;
text-align: center; text-align: center;
padding-top: 10px;
&.reply { &.reply {
font-size: .85rem; font-size: .85rem;
@@ -379,7 +379,8 @@
border: none; border: none;
background: $color-green; background: $color-green;
color: white; color: white;
padding: 10px; padding: 10px !important;
padding-left: 32px;
width: 100%; width: 100%;
max-width: 140px; max-width: 140px;
font-family: $font-family; font-family: $font-family;
@@ -9,7 +9,7 @@
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;
} }
} }
} }
@@ -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;
} }
+274 -160
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;
} }
@@ -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,6 +246,7 @@
} }
} }
// Roadmap page // Roadmap page
.plannedreleases { .plannedreleases {
.dot.big { .dot.big {
@@ -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; }
+54 -53
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\UmbracoCms.7.5.3\build\UmbracoCms.props" Condition="Exists('..\packages\UmbracoCms.7.5.3\build\UmbracoCms.props')" /> <Import Project="..\packages\UmbracoCms.7.5.5\build\UmbracoCms.props" Condition="Exists('..\packages\UmbracoCms.7.5.5\build\UmbracoCms.props')" />
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup> <PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
@@ -47,32 +47,32 @@
<Prefer32Bit>false</Prefer32Bit> <Prefer32Bit>false</Prefer32Bit>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="AutoMapper, Version=3.0.0.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="AutoMapper, Version=3.3.1.0, Culture=neutral, PublicKeyToken=be96cd2c38ef1005, processorArchitecture=MSIL">
<HintPath>..\packages\AutoMapper.3.0.0\lib\net40\AutoMapper.dll</HintPath> <HintPath>..\packages\AutoMapper.3.3.1\lib\net40\AutoMapper.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="AutoMapper.Net4, Version=0.0.0.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="AutoMapper.Net4, Version=3.3.1.0, Culture=neutral, PublicKeyToken=be96cd2c38ef1005, processorArchitecture=MSIL">
<HintPath>..\packages\AutoMapper.3.0.0\lib\net40\AutoMapper.Net4.dll</HintPath> <HintPath>..\packages\AutoMapper.3.3.1\lib\net40\AutoMapper.Net4.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="businesslogic, Version=1.0.6092.24022, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="businesslogic, Version=1.0.6183.23126, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\businesslogic.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.5\lib\businesslogic.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="ClientDependency.Core, Version=1.9.1.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="ClientDependency.Core, Version=1.9.2.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\ClientDependency.1.9.1\lib\net45\ClientDependency.Core.dll</HintPath> <HintPath>..\packages\ClientDependency.1.9.2\lib\net45\ClientDependency.Core.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="ClientDependency.Core.Mvc, Version=1.8.0.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="ClientDependency.Core.Mvc, Version=1.8.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\ClientDependency-Mvc5.1.8.0.0\lib\net45\ClientDependency.Core.Mvc.dll</HintPath> <HintPath>..\packages\ClientDependency-Mvc5.1.8.0.0\lib\net45\ClientDependency.Core.Mvc.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="cms, Version=1.0.6092.24022, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="cms, Version=1.0.6183.23126, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\cms.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.5\lib\cms.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="controls, Version=1.0.6092.24024, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="controls, Version=1.0.6183.23128, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\controls.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.5\lib\controls.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="CookComputing.XmlRpcV2, Version=2.5.0.0, Culture=neutral, PublicKeyToken=a7d6e17aa302004d, processorArchitecture=MSIL"> <Reference Include="CookComputing.XmlRpcV2, Version=2.5.0.0, Culture=neutral, PublicKeyToken=a7d6e17aa302004d, processorArchitecture=MSIL">
@@ -83,32 +83,32 @@
<HintPath>..\packages\EasyHttp.1.6.29.0\lib\net40\EasyHttp.dll</HintPath> <HintPath>..\packages\EasyHttp.1.6.29.0\lib\net40\EasyHttp.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Examine, Version=0.1.69.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="Examine, Version=0.1.70.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Examine.0.1.69.0\lib\Examine.dll</HintPath> <HintPath>..\packages\Examine.0.1.70.0\lib\Examine.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="HtmlAgilityPack, Version=1.4.9.0, Culture=neutral, PublicKeyToken=bd319b19eaf3b43a, processorArchitecture=MSIL"> <Reference Include="HtmlAgilityPack, Version=1.4.9.5, Culture=neutral, PublicKeyToken=bd319b19eaf3b43a, processorArchitecture=MSIL">
<HintPath>..\packages\HtmlAgilityPack.1.4.9\lib\Net45\HtmlAgilityPack.dll</HintPath> <HintPath>..\packages\HtmlAgilityPack.1.4.9.5\lib\Net45\HtmlAgilityPack.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="ICSharpCode.SharpZipLib, Version=0.86.0.518, Culture=neutral, PublicKeyToken=1b03e6acf1164f73, processorArchitecture=MSIL"> <Reference Include="ICSharpCode.SharpZipLib, Version=0.86.0.518, Culture=neutral, PublicKeyToken=1b03e6acf1164f73, processorArchitecture=MSIL">
<HintPath>..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll</HintPath> <HintPath>..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="ImageProcessor, Version=2.4.4.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="ImageProcessor, Version=2.4.5.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\ImageProcessor.2.4.4.0\lib\net45\ImageProcessor.dll</HintPath> <HintPath>..\packages\ImageProcessor.2.4.5.0\lib\net45\ImageProcessor.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="ImageProcessor.Web, Version=4.6.4.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="ImageProcessor.Web, Version=4.6.6.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\ImageProcessor.Web.4.6.4.0\lib\net45\ImageProcessor.Web.dll</HintPath> <HintPath>..\packages\ImageProcessor.Web.4.6.6.0\lib\net45\ImageProcessor.Web.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="InfoCaster.Umbraco.UrlTracker, Version=3.11.5900.30099, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="InfoCaster.Umbraco.UrlTracker, Version=3.11.5900.30099, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UrlTracker.3.11\lib\InfoCaster.Umbraco.UrlTracker.dll</HintPath> <HintPath>..\packages\UrlTracker.3.11\lib\InfoCaster.Umbraco.UrlTracker.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="interfaces, Version=1.0.6092.24017, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="interfaces, Version=1.0.6183.23122, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\interfaces.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.5\lib\interfaces.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="JsonFx, Version=2.0.1209.2802, Culture=neutral, PublicKeyToken=315052dd637f8a52, processorArchitecture=MSIL"> <Reference Include="JsonFx, Version=2.0.1209.2802, Culture=neutral, PublicKeyToken=315052dd637f8a52, processorArchitecture=MSIL">
@@ -116,7 +116,7 @@
<HintPath>..\packages\JsonFx.2.0.1209.2802\lib\net40\JsonFx.dll</HintPath> <HintPath>..\packages\JsonFx.2.0.1209.2802\lib\net40\JsonFx.dll</HintPath>
</Reference> </Reference>
<Reference Include="log4net, Version=1.2.11.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="log4net, Version=1.2.11.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\log4net.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.5\lib\log4net.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Lucene.Net, Version=2.9.4.1, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL"> <Reference Include="Lucene.Net, Version=2.9.4.1, Culture=neutral, PublicKeyToken=85089178b9ac3181, processorArchitecture=MSIL">
@@ -128,7 +128,7 @@
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Microsoft.ApplicationBlocks.Data, Version=1.0.1559.20655, Culture=neutral"> <Reference Include="Microsoft.ApplicationBlocks.Data, Version=1.0.1559.20655, Culture=neutral">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\Microsoft.ApplicationBlocks.Data.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.5\lib\Microsoft.ApplicationBlocks.Data.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Microsoft.AspNet.Identity.Core, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <Reference Include="Microsoft.AspNet.Identity.Core, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
@@ -204,8 +204,8 @@
<HintPath>..\packages\semver.1.1.2\lib\net451\Semver.dll</HintPath> <HintPath>..\packages\semver.1.1.2\lib\net451\Semver.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="SQLCE4Umbraco, Version=1.0.6092.24023, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="SQLCE4Umbraco, Version=1.0.6183.23127, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\SQLCE4Umbraco.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.5\lib\SQLCE4Umbraco.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="System.Collections.Immutable, Version=1.1.36.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> <Reference Include="System.Collections.Immutable, Version=1.1.36.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
@@ -214,11 +214,11 @@
</Reference> </Reference>
<Reference Include="System.Data.DataSetExtensions" /> <Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Data.SqlServerCe, Version=4.0.0.1, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL"> <Reference Include="System.Data.SqlServerCe, Version=4.0.0.1, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\System.Data.SqlServerCe.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.5\lib\System.Data.SqlServerCe.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="System.Data.SqlServerCe.Entity, Version=4.0.0.1, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL"> <Reference Include="System.Data.SqlServerCe.Entity, Version=4.0.0.1, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\System.Data.SqlServerCe.Entity.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.5\lib\System.Data.SqlServerCe.Entity.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="System.Net.Http" /> <Reference Include="System.Net.Http" />
@@ -282,47 +282,47 @@
<Reference Include="System.EnterpriseServices" /> <Reference Include="System.EnterpriseServices" />
<Reference Include="System.Xml.Linq" /> <Reference Include="System.Xml.Linq" />
<Reference Include="TidyNet, Version=1.0.0.0, Culture=neutral"> <Reference Include="TidyNet, Version=1.0.0.0, Culture=neutral">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\TidyNet.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.5\lib\TidyNet.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="umbraco, Version=1.0.6092.24026, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="umbraco, Version=1.0.6183.23129, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\umbraco.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.5\lib\umbraco.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Umbraco.Core, Version=1.0.6092.24019, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="Umbraco.Core, Version=1.0.6183.23123, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\Umbraco.Core.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.5\lib\Umbraco.Core.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="umbraco.DataLayer, Version=1.0.6092.24022, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="umbraco.DataLayer, Version=1.0.6183.23126, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\umbraco.DataLayer.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.5\lib\umbraco.DataLayer.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="umbraco.editorControls, Version=1.0.6092.24028, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="umbraco.editorControls, Version=1.0.6183.23131, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\umbraco.editorControls.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.5\lib\umbraco.editorControls.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Umbraco.IdentityExtensions, Version=1.0.5779.34109, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="Umbraco.IdentityExtensions, Version=1.0.5779.34109, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.IdentityExtensions.1.0.0\lib\net45\Umbraco.IdentityExtensions.dll</HintPath> <HintPath>..\packages\UmbracoCms.IdentityExtensions.1.0.0\lib\net45\Umbraco.IdentityExtensions.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="umbraco.MacroEngines, Version=1.0.6092.24028, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="umbraco.MacroEngines, Version=1.0.6183.23132, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\umbraco.MacroEngines.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.5\lib\umbraco.MacroEngines.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Umbraco.ModelsBuilder, Version=3.0.4.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="Umbraco.ModelsBuilder, Version=3.0.5.96, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Umbraco.ModelsBuilder.3.0.4\lib\Umbraco.ModelsBuilder.dll</HintPath> <HintPath>..\packages\Umbraco.ModelsBuilder.3.0.5\lib\Umbraco.ModelsBuilder.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="umbraco.providers, Version=1.0.6092.24024, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="umbraco.providers, Version=1.0.6183.23128, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\umbraco.providers.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.5\lib\umbraco.providers.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Umbraco.Web.UI, Version=1.0.6092.24029, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="Umbraco.Web.UI, Version=1.0.6183.23133, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\Umbraco.Web.UI.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.5\lib\Umbraco.Web.UI.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="UmbracoExamine, Version=0.7.0.24023, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="UmbracoExamine, Version=0.7.0.23127, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.5.3\lib\UmbracoExamine.dll</HintPath> <HintPath>..\packages\UmbracoCms.Core.7.5.5\lib\UmbracoExamine.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="UrlRewritingNet.UrlRewriter, Version=2.0.7.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="UrlRewritingNet.UrlRewriter, Version=2.0.7.0, Culture=neutral, processorArchitecture=MSIL">
@@ -1707,7 +1707,6 @@
<Content Include="Views\MacroPartials\Navigation\TopNavigation.cshtml" /> <Content Include="Views\MacroPartials\Navigation\TopNavigation.cshtml" />
<Content Include="masterpages\ForumMaster.master" /> <Content Include="masterpages\ForumMaster.master" />
<Content Include="masterpages\DocumentationMaster.master" /> <Content Include="masterpages\DocumentationMaster.master" />
<Content Include="masterpages\AddMarkdownProp.master" />
<Content Include="masterpages\ComRepositoryFrontpage.master" /> <Content Include="masterpages\ComRepositoryFrontpage.master" />
<Content Include="Assets\css\fonts\icomoon\icomoon.eot" /> <Content Include="Assets\css\fonts\icomoon\icomoon.eot" />
<Content Include="Assets\css\fonts\icomoon\icomoon.ttf" /> <Content Include="Assets\css\fonts\icomoon\icomoon.ttf" />
@@ -4282,7 +4281,6 @@
<Content Include="masterpages\ManageSpam.master" /> <Content Include="masterpages\ManageSpam.master" />
<Content Include="macroScripts\ManageSpam.cshtml" /> <Content Include="macroScripts\ManageSpam.cshtml" />
<Content Include="masterpages\ProjectsVersioned.master" /> <Content Include="masterpages\ProjectsVersioned.master" />
<Content Include="macroScripts\ProjectsVersioned.cshtml" />
<Content Include="macroScripts\ProjectsVersionList.cshtml" /> <Content Include="macroScripts\ProjectsVersionList.cshtml" />
<Content Include="masterpages\ProjectCompatibility.master" /> <Content Include="masterpages\ProjectCompatibility.master" />
<Content Include="macroScripts\EditProjectCompatibility.cshtml" /> <Content Include="macroScripts\EditProjectCompatibility.cshtml" />
@@ -4409,7 +4407,9 @@
<Content Include="Views\Partials\Grid\Editors\Embed.cshtml" /> <Content Include="Views\Partials\Grid\Editors\Embed.cshtml" />
<Content Include="Views\Partials\Grid\Editors\Base.cshtml" /> <Content Include="Views\Partials\Grid\Editors\Base.cshtml" />
<Content Include="Views\Partials\Grid\Bootstrap3.cshtml" /> <Content Include="Views\Partials\Grid\Bootstrap3.cshtml" />
<Content Include="Views\Partials\Grid\Bootstrap3-Fluid.cshtml" />
<Content Include="Views\Partials\Grid\Bootstrap2.cshtml" /> <Content Include="Views\Partials\Grid\Bootstrap2.cshtml" />
<Content Include="Views\Partials\Grid\Bootstrap2-Fluid.cshtml" />
<None Include="web.Debug.config"> <None Include="web.Debug.config">
<DependentUpon>web.config</DependentUpon> <DependentUpon>web.config</DependentUpon>
</None> </None>
@@ -4482,14 +4482,15 @@
<!-- Only runs if the ClientFiles build folder doesn't yet exist --> <!-- Only runs if the ClientFiles build folder doesn't yet exist -->
<CallTarget Targets="ClientFilesBuild" Condition="!Exists('$(ProjectDir)\..\OurUmbraco.Client\build\assets')" /> <CallTarget Targets="ClientFilesBuild" Condition="!Exists('$(ProjectDir)\..\OurUmbraco.Client\build\assets')" />
</Target> </Target>
<Import Project="..\packages\AutoMapper.3.3.1\tools\AutoMapper.targets" Condition="Exists('..\packages\AutoMapper.3.3.1\tools\AutoMapper.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup> <PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup> </PropertyGroup>
<Error Condition="!Exists('..\packages\UmbracoCms.7.5.3\build\UmbracoCms.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\UmbracoCms.7.5.3\build\UmbracoCms.props'))" /> <Error Condition="!Exists('..\packages\UmbracoCms.7.5.5\build\UmbracoCms.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\UmbracoCms.7.5.5\build\UmbracoCms.props'))" />
<Error Condition="!Exists('..\packages\UmbracoCms.7.5.3\build\UmbracoCms.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\UmbracoCms.7.5.3\build\UmbracoCms.targets'))" /> <Error Condition="!Exists('..\packages\UmbracoCms.7.5.5\build\UmbracoCms.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\UmbracoCms.7.5.5\build\UmbracoCms.targets'))" />
</Target> </Target>
<Import Project="..\packages\UmbracoCms.7.5.3\build\UmbracoCms.targets" Condition="Exists('..\packages\UmbracoCms.7.5.3\build\UmbracoCms.targets')" /> <Import Project="..\packages\UmbracoCms.7.5.5\build\UmbracoCms.targets" Condition="Exists('..\packages\UmbracoCms.7.5.5\build\UmbracoCms.targets')" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets. Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="AfterBuild"> <Target Name="AfterBuild">
@@ -4,7 +4,7 @@
if (string.IsNullOrWhiteSpace(memberGuid) == false) if (string.IsNullOrWhiteSpace(memberGuid) == false)
{ {
var memberService = UmbracoContext.Current.Application.Services.MemberService; var memberService = ApplicationContext.Current.Services.MemberService;
var member = memberService.GetByKey(new Guid(memberGuid)); var member = memberService.GetByKey(new Guid(memberGuid));
if (member == null) if (member == null)
@@ -10,5 +10,5 @@
<h4><a href="?category=@childPage.Name">@childPage.Name</a></h4> <h4><a href="?category=@childPage.Name">@childPage.Name</a></h4>
</li> </li>
} }
<li><h4><a href="?category=uaas">Umbraco as a Service</a></h4></li> <li><h4><a href="?category=uaas">Umbraco Cloud</a></h4></li>
</ul> </ul>
@@ -22,7 +22,7 @@
} }
if (category != null) if (category != null)
{ {
headline = category == "uaas" ? "Umbraco as a Service" : category.ToLowerInvariant(); headline = category == "uaas" ? "Umbraco Cloud" : category.ToLowerInvariant();
} }
var searchFilters = new SearchFilters(BooleanOperation.And); var searchFilters = new SearchFilters(BooleanOperation.And);
@@ -0,0 +1,92 @@
@inherits UmbracoViewPage<dynamic>
@using Umbraco.Web.Templates
@using Newtonsoft.Json.Linq
@*
Razor helpers located at the bottom of this file
*@
@if (Model != null && Model.sections != null)
{
var oneColumn = ((System.Collections.ICollection)Model.sections).Count == 1;
<div class="umb-grid">
@if (oneColumn)
{
foreach (var section in Model.sections) {
<div class="grid-section">
@foreach (var row in section.rows) {
@renderRow(row, true);
}
</div>
}
}else {
<div class="container-fluid">
<div class="row-fluid clearfix">
@foreach (var s in Model.sections) {
<div class="grid-section">
<div class="@("span" + s.grid) column">
@foreach (var row in s.rows) {
@renderRow(row, false);
}
</div>
</div>
}
</div>
</div>
}
</div>
}
@helper renderRow(dynamic row, bool singleColumn){
<div @RenderElementAttributes(row)>
@Umbraco.If(singleColumn, "<div class='container-fluid'>")
<div class="row-fluid clearfix">
@foreach ( var area in row.areas ) {
<div class="@("span" + area.grid) column">
<div @RenderElementAttributes(area)>
@foreach (var control in area.controls) {
if (control !=null && control.editor != null && control.editor.view != null ) {
<text>@Html.Partial("grid/editors/base", (object)control)</text>
}
}
</div>
</div>}
</div>
@Umbraco.If(singleColumn, "</div>")
</div>
}
@functions {
public static MvcHtmlString RenderElementAttributes(dynamic contentItem)
{
var attrs = new List<string>();
JObject cfg = contentItem.config;
if(cfg != null)
foreach (JProperty property in cfg.Properties())
{
var propertyValue = TemplateUtilities.CleanForXss(property.Value.ToString());
attrs.Add(property.Name + "=\"" + propertyValue + "\"");
}
JObject style = contentItem.styles;
if (style != null) {
var cssVals = new List<string>();
foreach (JProperty property in style.Properties())
{
var propertyValue = TemplateUtilities.CleanForXss(property.Value.ToString());
if (string.IsNullOrWhiteSpace(propertyValue) == false)
{
cssVals.Add(property.Name + ":" + propertyValue + ";");
}
}
if (cssVals.Any())
attrs.Add("style='" + string.Join(" ", cssVals) + "'");
}
return new MvcHtmlString(string.Join(" ", attrs));
}
}
@@ -64,19 +64,27 @@
JObject cfg = contentItem.config; JObject cfg = contentItem.config;
if(cfg != null) if(cfg != null)
foreach (JProperty property in cfg.Properties()) { foreach (JProperty property in cfg.Properties())
attrs.Add(property.Name + "=\"" + property.Value.ToString() + "\""); {
var propertyValue = TemplateUtilities.CleanForXss(property.Value.ToString());
attrs.Add(property.Name + "=\"" + propertyValue + "\"");
} }
JObject style = contentItem.styles; JObject style = contentItem.styles;
if (style != null) { if (style != null) {
var cssVals = new List<string>(); var cssVals = new List<string>();
foreach (JProperty property in style.Properties()) foreach (JProperty property in style.Properties())
cssVals.Add(property.Name + ":" + property.Value.ToString() + ";"); {
var propertyValue = TemplateUtilities.CleanForXss(property.Value.ToString());
if (string.IsNullOrWhiteSpace(propertyValue) == false)
{
cssVals.Add(property.Name + ":" + propertyValue + ";");
}
}
if (cssVals.Any()) if (cssVals.Any())
attrs.Add("style=\"" + string.Join(" ", cssVals) + "\""); attrs.Add("style=\"" + string.Join(" ", cssVals) + "\"");
} }
return new MvcHtmlString(string.Join(" ", attrs)); return new MvcHtmlString(string.Join(" ", attrs));
@@ -0,0 +1,88 @@
@inherits UmbracoViewPage<dynamic>
@using Umbraco.Web.Templates
@using Newtonsoft.Json.Linq
@*
Razor helpers located at the bottom of this file
*@
@if (Model != null && Model.sections != null)
{
var oneColumn = ((System.Collections.ICollection)Model.sections).Count == 1;
<div class="umb-grid">
@if (oneColumn)
{
foreach (var section in Model.sections) {
<div class="grid-section">
@foreach (var row in section.rows) {
@renderRow(row);
}
</div>
}
}else {
<div class="row clearfix">
@foreach (var s in Model.sections) {
<div class="grid-section">
<div class="col-md-@s.grid column">
@foreach (var row in s.rows) {
@renderRow(row);
}
</div>
</div>
}
</div>
}
</div>
}
@helper renderRow(dynamic row){
<div @RenderElementAttributes(row)>
<div class="row clearfix">
@foreach ( var area in row.areas ) {
<div class="col-md-@area.grid column">
<div @RenderElementAttributes(area)>
@foreach (var control in area.controls) {
if (control !=null && control.editor != null && control.editor.view != null ) {
<text>@Html.Partial("grid/editors/base", (object)control)</text>
}
}
</div>
</div>}
</div>
</div>
}
@functions {
public static MvcHtmlString RenderElementAttributes(dynamic contentItem)
{
var attrs = new List<string>();
JObject cfg = contentItem.config;
if(cfg != null)
foreach (JProperty property in cfg.Properties())
{
var propertyValue = TemplateUtilities.CleanForXss(property.Value.ToString());
attrs.Add(property.Name + "=\"" + propertyValue + "\"");
}
JObject style = contentItem.styles;
if (style != null) {
var cssVals = new List<string>();
foreach (JProperty property in style.Properties())
{
var propertyValue = TemplateUtilities.CleanForXss(property.Value.ToString());
if (string.IsNullOrWhiteSpace(propertyValue) == false)
{
cssVals.Add(property.Name + ":" + propertyValue + ";");
}
}
if (cssVals.Any())
attrs.Add("style='" + string.Join(" ", cssVals) + "'");
}
return new MvcHtmlString(string.Join(" ", attrs));
}
}
@@ -64,19 +64,27 @@
JObject cfg = contentItem.config; JObject cfg = contentItem.config;
if(cfg != null) if(cfg != null)
foreach (JProperty property in cfg.Properties()) { foreach (JProperty property in cfg.Properties())
attrs.Add(property.Name + "=\"" + property.Value.ToString() + "\""); {
var propertyValue = TemplateUtilities.CleanForXss(property.Value.ToString());
attrs.Add(property.Name + "=\"" + propertyValue + "\"");
} }
JObject style = contentItem.styles; JObject style = contentItem.styles;
if (style != null) { if (style != null) {
var cssVals = new List<string>(); var cssVals = new List<string>();
foreach (JProperty property in style.Properties()) foreach (JProperty property in style.Properties())
cssVals.Add(property.Name + ":" + property.Value.ToString() + ";"); {
var propertyValue = TemplateUtilities.CleanForXss(property.Value.ToString());
if (string.IsNullOrWhiteSpace(propertyValue) == false)
{
cssVals.Add(property.Name + ":" + propertyValue + ";");
}
}
if (cssVals.Any()) if (cssVals.Any())
attrs.Add("style=\"" + string.Join(" ", cssVals) + "\""); attrs.Add("style=\"" + string.Join(" ", cssVals) + "\"");
} }
return new MvcHtmlString(string.Join(" ", attrs)); return new MvcHtmlString(string.Join(" ", attrs));
@@ -1,5 +1,4 @@
@model dynamic @model dynamic
@using Umbraco.Web.Templates
@functions { @functions {
public static string EditorView(dynamic contentItem) public static string EditorView(dynamic contentItem)
@@ -1,3 +1,2 @@
@model dynamic @model dynamic
@using Umbraco.Web.Templates
@Html.Raw(Model.value) @Html.Raw(Model.value)
@@ -1,6 +1,4 @@
@inherits UmbracoViewPage<dynamic> @inherits UmbracoViewPage<dynamic>
@using Umbraco.Web.Templates
@if (Model.value != null) @if (Model.value != null)
{ {
@@ -1,5 +1,4 @@
@model dynamic @model dynamic
@using Umbraco.Web.Templates
@if (Model.value != null) @if (Model.value != null)
{ {
@@ -4,10 +4,9 @@
@if (Model.editor.config.markup != null) @if (Model.editor.config.markup != null)
{ {
string markup = Model.editor.config.markup.ToString(); string markup = Model.editor.config.markup.ToString();
var UmbracoHelper = new UmbracoHelper(UmbracoContext.Current); var UmbracoHelper = new UmbracoHelper(UmbracoContext.Current);
markup = markup.Replace("#value#", UmbracoHelper.ReplaceLineBreaksForHtml(Model.value.ToString())); markup = markup.Replace("#value#", UmbracoHelper.ReplaceLineBreaksForHtml(TemplateUtilities.CleanForXss(Model.value.ToString())));
markup = markup.Replace("#style#", Model.editor.config.style.ToString()); markup = markup.Replace("#style#", Model.editor.config.style.ToString());
<text> <text>
@@ -66,11 +66,11 @@
<div class="versions"> <div class="versions">
@if (Model.WorksOnUaaS) @if (Model.WorksOnUaaS)
{ {
<span class="smiley joyous">Works on Umbraco as a Service</span> <span class="smiley joyous">Works on Umbraco Cloud</span>
} }
else else
{ {
<span class="smiley untested">Untested or doesn't work on Umbraco as a Service</span> <span class="smiley untested">Untested or doesn't work on Umbraco Cloud</span>
} }
@foreach (var ver in Model.VersionCompatibilities) @foreach (var ver in Model.VersionCompatibilities)
{ {
+3
View File
@@ -18,6 +18,9 @@
<system.web.webPages.razor> <system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage"> <pages pageBaseType="System.Web.Mvc.WebViewPage">
@@ -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.
+10
View File
@@ -31,6 +31,16 @@
views/dashboard/developer/developerdashboardvideos.html views/dashboard/developer/developerdashboardvideos.html
</control> </control>
</tab> </tab>
<tab caption="Health Check">
<control>
views/dashboard/developer/healthcheck.html
</control>
</tab>
<tab caption="Redirect URL Management">
<control>
views/dashboard/developer/redirecturls.html
</control>
</tab>
<tab caption="Examine Management"> <tab caption="Examine Management">
<control> <control>
views/dashboard/developer/examinemanagement.html views/dashboard/developer/examinemanagement.html
@@ -81,6 +81,27 @@ You can unsubscribe from your profile on our.umbraco.org
</body> </body>
</notification> </notification>
<notification name="MarkAsSolutionReminderSingle"
assembly="NotificationsCore"
type="NotificationsCore.NotificationTypes.MarkAsSolutionReminderSingle">
<subject>Umbraco community: Solution Reminder</subject>
<body>
We noticed that the topic {0} you created in the Umbraco Community Forum does not have a post marked as a solution.
If one of the replies helped answer your question or resolve your issue please mark it as a solution so others can quickly find it.
You can view the topic and replies here: {1}
Thank You from the Umbraco Community!
--------------------------------------------------
You get this notification because you posted to our forum.
You can unsubscribe from your profile on our.umbraco.org
</body>
</notification>
</instant> </instant>
</configuration> </configuration>
@@ -39,7 +39,7 @@
"view": "textstring", "view": "textstring",
"icon": "icon-quote", "icon": "icon-quote",
"config": { "config": {
"style": "border-left: 3px solid #ccc; padding: 10px; color: #ccc; font-family: serif; font-variant: italic; font-size: 18px", "style": "border-left: 3px solid #ccc; padding: 10px; color: #ccc; font-family: serif; font-style: italic; font-size: 18px",
"markup": "<blockquote>#value#</blockquote>" "markup": "<blockquote>#value#</blockquote>"
} }
} }
@@ -1,304 +0,0 @@
@inherits umbraco.MacroEngines.DynamicNodeContext
@using System.Globalization
@using System.Text.RegularExpressions
@using OurUmbraco.MarketPlace.Models
@using OurUmbraco.Our
@using uForum.Businesslogic
@{
var queriedVersion = Request.QueryString["v"];
int requestedVersion;
int.TryParse(queriedVersion, out requestedVersion);
Version properVersion = null;
if (requestedVersion != 0)
{
properVersion = GetProperVersion(requestedVersion.ToString(CultureInfo.InvariantCulture));
}
var projectGroups = Model.Children.Where("nodeTypeAlias == \"ProjectGroup\"");
var projects = new List<UmbracoProject>();
foreach (var projectGroup in projectGroups)
{
foreach (var project in projectGroup.Children)
{
if (project.projectLive)
{
var versionsList = new List<int>();
var compatibleVersions = project.CompatibleVersions.Split(',');
foreach (var compatibleVersion in compatibleVersions)
{
if (string.IsNullOrWhiteSpace(compatibleVersion) == false && compatibleVersion != "saved")
{
int version;
if (int.TryParse(compatibleVersion.Substring(1), out version))
{
versionsList.Add(version);
}
}
}
var umbracoProject = new UmbracoProject
{
Id = project.Id,
Name = project.Name,
CreateDate = project.CreateDate,
CompatibleVersions = versionsList
};
projects.Add(umbracoProject);
}
}
}
if (requestedVersion == 0)
{
<div class="deliPromoBox clearfix">
@{
var vs = new List<int>();
foreach (var project in projects.OrderByDescending(x => x.CreateDate))
{
foreach (var version in project.CompatibleVersions.Where(version => vs.Contains(version) == false))
{
vs.Add(version);
}
}
foreach (var v in vs.OrderBy(x => x).Where(x => x.ToString(CultureInfo.InvariantCulture).StartsWith("3") == false && x.ToString(CultureInfo.InvariantCulture).StartsWith("5") == false).Skip(6))
{
<a href="/Projects/ProjectsVersioned?v=@v">Umbraco @(GetProperVersion(v.ToString(CultureInfo.InvariantCulture)).ToString(2)).x</a><br />
}
}
</div>
}
else
{
<h1 class="deliCatHead">Umbraco @(properVersion.ToString(2)).x compatible projects</h1>
<p><strong>Note:</strong> packages higher up in this list are more likely to actually work as they have been reported <br />to be working with Umbraco version @(properVersion.ToString(2)).x.</p>
<div class="deliPromoBox clearfix">
<div class="deliPromoArea">
<div class="deliPromoBox new clearfix">
@{
var vs = new List<int>();
foreach (var project in projects.OrderByDescending(x => x.CreateDate))
{
foreach (var version in project.CompatibleVersions.Where(version => vs.Contains(version) == false))
{
vs.Add(version);
}
}
}
<ul class="promoOptions">
@foreach (var v in vs.OrderBy(x => x).Where(x => x.ToString(CultureInfo.InvariantCulture).StartsWith("3") == false && x.ToString(CultureInfo.InvariantCulture).StartsWith("5") == false).Skip(6))
{
var itemProperVersion = GetProperVersion(v.ToString(CultureInfo.InvariantCulture)).ToString(2);
var currentProperVersion = properVersion.ToString(2);
<li><a href="?v=@v" class="newnav @(itemProperVersion == currentProperVersion ? "on": null)">@(itemProperVersion).x</a></li>
}
</ul>
@{
var projectIds = projects.Where(x => x.CompatibleVersions.Contains(requestedVersion)).Select(x => x.Id).ToArray();
var selection = string.Join(",", projectIds);
if (string.IsNullOrWhiteSpace(selection) == false)
{
var reader = Data.SqlHelper.ExecuteReader("SELECT id, nodeId, downloads FROM wikiFiles WHERE type = 'package' AND nodeId IN (" + selection + ")");
while (reader.Read())
{
var project = projects.FirstOrDefault(x => x.Id == reader.GetInt("nodeId"));
if (project != null)
{
project.TotalDownloads = project.TotalDownloads + reader.GetInt("downloads");
project.FileId = reader.GetInt("id");
}
}
reader = Data.SqlHelper.ExecuteReader("SELECT id, SUM([points]) AS Karma FROM powersProject WHERE id IN (" + selection + ") GROUP BY Id");
while (reader.Read())
{
var project = projects.FirstOrDefault(x => x.Id == reader.GetInt("id"));
if (project != null)
{
project.Karma = reader.GetInt("Karma");
}
}
var i = 1;
foreach (var project in projects.OrderBy(x => x.TotalDownloads).Where(x => x.CompatibleVersions.Contains(requestedVersion)))
{
project.TotalDownloadsRank = i + 5;
i++;
}
i = 1;
foreach (var project in projects.OrderBy(x => x.DownloadsCurrentVersion).Where(x => x.CompatibleVersions.Contains(requestedVersion)))
{
project.CurrentVersionDownloadsRank = i + 10;
i++;
}
i = 1;
foreach (var project in projects.OrderBy(x => x.Karma).Where(x => x.CompatibleVersions.Contains(requestedVersion)))
{
project.KarmaRank = i + 5;
i++;
}
foreach (var project in projects.Where(x => x.CompatibleVersions.Contains(requestedVersion)))
{
project.TotalRank = project.TotalDownloadsRank + project.CurrentVersionDownloadsRank + project.KarmaRank;
}
var fileIds = projects.Where(x => x.CompatibleVersions.Contains(requestedVersion)).Select(x => x.FileId).ToArray();
selection = string.Join(",", fileIds);
reader = Data.SqlHelper.ExecuteReader("SELECT * FROM DeliVersionCompatibility WHERE fileID IN(" + selection + ") AND version LIKE '" + GetProperVersion(requestedVersion.ToString(CultureInfo.InvariantCulture)).ToString(2) + ".%'");
while (reader.Read())
{
var project = projects.FirstOrDefault(x => x.Id == reader.GetInt("projectId"));
if (project != null)
{
project.ReportsCount++;
if (reader.GetBoolean("isCompatible"))
{
project.CompatibilityCount++;
}
}
}
var totalProjects = projects.Count(x => x.CompatibleVersions.Contains(requestedVersion));
foreach (var project in projects.Where(x => x.CompatibleVersions.Contains(requestedVersion)))
{
if (project.ReportsCount > 0 && project.CompatibilityCount == 0)
{
project.TotalRank = -30;
continue;
}
if (project.ReportsCount > 0)
{
project.TotalRank = project.TotalRank + (project.CompatibilityCount + totalProjects);
float compats = project.CompatibilityCount;
float numReps = project.ReportsCount;
var percentage = compats/numReps;
project.CompatibilityScore = percentage;
project.TotalRank = (int) (project.TotalRank*percentage);
}
}
<p class="viewAll">Showing @totalProjects projects</p>
}
}
<ul id="newest-projects">
@foreach (var project in projects.OrderByDescending(x => x.TotalRank).Where(x => x.CompatibleVersions.Contains(requestedVersion)))
{
var node = Library.NodeById(project.Id);
var description = node.Description.ToString();
var category = node.Parent.Name;
var screenshot = node.DefaultScreenshotPath.ToString();
var icon = string.IsNullOrEmpty(screenshot)
? "/css/img/package2.png"
: string.Format("image={0}?bgcolor=fff&width=50&height=50&format=png", screenshot);
<li class="clearfix">
<div class="deliPackage">
<div class="brief">
<a href="@node.Url" class="packageIcon" style="background:url(@icon) no-repeat top left;">Package</a>
<h3><a href="@node.Url">@project.Name</a></h3>
<div class="category">@category</div>
<div class="commercialIndicator @node.ListingType">@node.ListingType</div>
</div>
<div class="hiLite">
<p><a href="@node.Url">@(ShortenText(description))</a></p>
</div>
<div class="popularity">
<div class="karma">
@project.Karma <small>Karma</small>
</div>
<div class="downloads">
@project.TotalDownloads <small>Downloads</small>
</div>
</div>
</div>
</li>
}
</ul>
</div>
</div>
</div>
}
}
@functions {
public Version GetProperVersion(string version)
{
if (version == "4.1.0")
{
return new Version(version);
}
version = version.Replace(".", "");
if (version.EndsWith("x"))
{
version = version.Substring(0, version.IndexOf("x", StringComparison.Ordinal));
}
if (version == "410" || version == "4100")
{
return new Version("4.10");
}
if (version == "411" || version == "4110")
{
return new Version("4.11");
}
if (version.EndsWith("x"))
{
version = version.Substring(0, version.IndexOf("x", StringComparison.Ordinal) - 1);
}
var splitVersion = version.ToCharArray();
version = string.Join(".", splitVersion);
if (version.Length == 1)
{
version = version + ".0";
}
var tempRevision = new Version(version);
return tempRevision.Revision == -1 ? new Version(tempRevision.Major, tempRevision.Minor, 0) : tempRevision;
}
public static string ShortenText(string text)
{
text = Utils.StripHTML(text).Replace("&nbsp;", "");
if (text.Length > 210)
{
text = text.Substring(0, 210);
text = text.Substring(0, text.LastIndexOf(' '));
}
text = Regex.Replace(text, @"[^a-zA-Z0-9\s.?!&;]", ""); //strip all crap from the listing such as ======================================= !!!!
return text.Trim();
}
}
@@ -1,57 +0,0 @@
<%@ Master Language="C#" MasterPageFile="~/umbraco/masterpages/default.master" AutoEventWireup="true" %>
<asp:Content ContentPlaceHolderID="ContentPlaceHolderDefault" runat="server">
<%@ Master Language="C#" MasterPageFile="~/umbraco/masterpages/default.master" AutoEventWireup="true" %>
<asp:Content ContentPlaceHolderID="ContentPlaceHolderDefault" runat="server">
<body onload="JavaScript:timedRefresh(5000);">
<umbraco:Macro runat="server" language="cshtml">
@using System.Threading
@using System.Diagnostics
@using uForum.Businesslogic
@{
var stopwatch1 = new Stopwatch();
stopwatch1.Start();
var records = 10;
if (Request.QueryString["records"] != null)
{
records = int.Parse(Request.QueryString["records"]);
}
var sql = string.Format("SELECT TOP {0} contentNodeId, versionId FROM [our.umbraco.org.live].[dbo].[cmsPropertyData] WHERE contentNodeId IN (SELECT NodeId FROM [our.umbraco.org.live].[dbo].[cmsMember]) AND contentNodeId NOT IN (SELECT contentNodeId FROM [our.umbraco.org.live].[dbo].[cmsPropertyData] WHERE propertytypeid = 203) GROUP BY contentNodeId, versionId", records);
var reader = Data.SqlHelper.ExecuteReader(sql);
while (reader.Read())
{
var contentNodeId = reader.GetInt("contentNodeId");
var versionId = reader.GetGuid("versionId").ToString();
var stopwatch2 = new Stopwatch();
stopwatch2.Start();
Data.SqlHelper.ExecuteNonQuery("INSERT INTO [our.umbraco.org.live].[dbo].[cmsPropertyData] (contentNodeId, versionId, propertyTypeId) VALUES (@id, @versionId, 203)", Data.SqlHelper.CreateParameter("@id", contentNodeId), Data.SqlHelper.CreateParameter("@versionId", versionId));
stopwatch2.Stop();
<span style="font-size: 9px;">@contentNodeId - @stopwatch2.Elapsed.Ticks</span>
}
reader.Close();
reader.Dispose();
stopwatch1.Stop();
<hr />
<p>Updated @records records in @stopwatch1.Elapsed.Seconds seconds</p>
}
</umbraco:Macro>
<script type="text/JavaScript">
<!--
function timedRefresh(timeoutPeriod) {
setTimeout("location.reload(true);",timeoutPeriod);
}
// -->
</script>
</body>
</asp:Content>
</asp:Content>
+103 -109
View File
@@ -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)
{ {
@@ -103,87 +103,37 @@
<umbraco:Macro linkToCurrent="1" Alias="Breadcrumb" runat="server"></umbraco:Macro> <umbraco:Macro linkToCurrent="1" Alias="Breadcrumb" runat="server"></umbraco:Macro>
</div> </div>
<style> <div class="explain flex items-center">
.release-page .explain h2 {
margin-top: 12px;
font-size: 2em;
margin-bottom: .3rem;
color: rgba(0,0,0,.8);
}
.release-page .dot { <div class="release-progress-indicator flex flex-wrap items-center">
border: none;
}
.release-page .dot.big { <span class="dot big progress">
position: relative;
text-indent: 0;
margin: 15px auto 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;
}
</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">
<h2>
v<umbraco:Item ID="Item1" field="pageName" runat="server" />
</h2>
<small>Status: <span><%= release.released ? "Released" : "In Progress" %></span></small>
<% if (release.released == false)
{ %>
<h3>
<span><%= percentComplete %>% complete</span> <span class="release-progress-version flex flex-column">
<span><%= 100 - percentComplete %>% in progress</span> <h2>
</h3> <strong><umbraco:Item ID="Item1" field="pageName" runat="server" /></strong>
<h3>Target release date: <span style="color:#5B5B5B"><%= releaseDate %></span></h3> </h2>
<% } %> <small>Status: <span><%= release.released ? "Released" : "In Progress" %></span></small>
<% if (release.released == false)
{ %>
<h3>
<umbraco:Macro ID="Macro5" Language="cshtml" runat="server"> <span><%= percentComplete %>% complete</span>
@if(Model.HasValue("releaseNotes")) { <span><%= 100 - percentComplete %>% in progress</span>
<small><p>@Model.releaseNotes</p></small> </h3>
} <h3>Target release date: <span style="color:#5B5B5B"><%= releaseDate %></span></h3>
</umbraco:Macro> <% } %>
<umbraco:Macro ID="Macro5" Language="cshtml" runat="server">
@if(Model.HasValue("releaseNotes")) {
<small><p>@Model.releaseNotes</p></small>
}
</umbraco:Macro>
</span>
</div> </div>
</div> </div>
@@ -195,32 +145,44 @@
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)
{
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") col-sm-1">
<i class="icon-Download-alt"></i>
</div>
<div class="release @(item.IsFirst() == false ? "bin" : "zip") col-md-5">
<h3><a href="/ReleaseDownload?id=@item.Id" onclick="_gaq.push(['_trackEvent', 'Release', 'Download', '@item.Name']);">@item.Name</a></h3> <div class="release-section flex flex-row flex-wrap">
@if(item.IsFirst())
{ <!-- Download button -->
<p>This is the main Umbraco download, generally you won't need anything else.</p> <div class="release-section-group">
} <h3>Download and install</h3>
<small>Downloaded @numberOfDownloads times - uploaded @item.UploadDate.ToString("D")</small> @foreach (var item in downloads)
</div> {
} else { if (item.IsFirst())
<div style="display: none;"><a href="/ReleaseDownload?id=@item.Id" onclick="_gaq.push(['_trackEvent', 'Release', 'Download', '@item.Name']);">@item.Name</a></div> {
var numberOfDownloads = 0;
int.TryParse(item.NumberOfDownloads, out numberOfDownloads);
numberOfDownloads = numberOfDownloads + OurUmbraco.Our.Utils.GetReleaseDownloadCount(item.Id);
<div class="release-section-action">
<a class="button green" href="/ReleaseDownload?id=@item.Id" onclick="ga('send', 'event', 'Release', 'Download', '@item.Name');">Download Umbraco @Model.Name</a>
</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>
<small>Downloaded @numberOfDownloads times - uploaded @item.UploadDate.ToString("D")</small>
}
}
</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>
} }
} }
@@ -231,7 +193,7 @@
<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>
@@ -265,7 +227,9 @@
<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>
@@ -283,7 +247,9 @@
<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>
@@ -301,7 +267,9 @@
<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>
@@ -337,16 +305,42 @@
<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");
var countIsOdd = ((downloads.Count() & 1) != 0) ? true : false;
if(downloads.Any())
{
<div class="nuget-badge"> <div class="release-other-files">
<a href="https://nuget.org/packages/UmbracoCms/@Model.Name"> <h2>All files</h2>
<p><code>PM&gt; Install-Package UmbracoCms -Version @Model.Name</code></p>
</a> @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 -->
@@ -29,10 +29,12 @@
currentMember = member.Id; currentMember = member.Id;
} }
Application.SqlHelper.ExecuteNonQuery( using (var sqlHelper = Application.SqlHelper)
@"insert into projectDownload(projectId,memberId,timestamp) values(@id, @memberId, getdate())", {
Application.SqlHelper.CreateParameter("@id", docId), sqlHelper.ExecuteNonQuery(@"insert into projectDownload(projectId,memberId,timestamp) values(@id, @memberId, getdate())",
Application.SqlHelper.CreateParameter("@memberId", currentMember)); sqlHelper.CreateParameter("@id", docId),
sqlHelper.CreateParameter("@memberId", currentMember));
}
Response.Redirect(link, false); Response.Redirect(link, false);
} }
@@ -151,30 +151,30 @@ The five people with most votes from 15 March until 15 April 2011 will become 20
<%}else{ <%}else{
// Umbraco.Forms.Data.Storage.RecordStorage s = new Umbraco.Forms.Data.Storage.RecordStorage(); // Umbraco.Forms.Data.Storage.RecordStorage s = new Umbraco.Forms.Data.Storage.RecordStorage();
//var all = s.GetAllRecords(new Guid("12c58e28-ca9e-4e05-9849-8ae8ed555109")); //var all = s.GetAllRecords(new Guid("12c58e28-ca9e-4e05-9849-8ae8ed555109"));
//var voted = all.Find(r => r.MemberKey.ToString() == umbraco.cms.businesslogic.member.Member.GetCurrentMember().Id.ToString()); //var voted = all.Find(r => r.MemberKey.ToString() == umbraco.cms.businesslogic.member.Member.GetCurrentMember().Id.ToString());
System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(System.Configuration.ConfigurationManager.AppSettings["umbracoDbDSN"]); System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(System.Configuration.ConfigurationManager.AppSettings["umbracoDbDSN"]);
System.Data.SqlClient.SqlCommand comm = new System.Data.SqlClient.SqlCommand( System.Data.SqlClient.SqlCommand comm = new System.Data.SqlClient.SqlCommand(
"SELECT 1 FROM UFRecords where form = '12C58E28-CA9E-4E05-9849-8AE8ED555109' and memberkey = @memberkey", "SELECT 1 FROM UFRecords where form = '12C58E28-CA9E-4E05-9849-8AE8ED555109' and memberkey = @memberkey",
conn); conn);
comm.Parameters.AddWithValue("@memberkey",umbraco.cms.businesslogic.member.Member.GetCurrentMember().Id); comm.Parameters.AddWithValue("@memberkey",umbraco.cms.businesslogic.member.Member.GetCurrentMember().Id);
conn.Open(); conn.Open();
bool membervoted = false; bool membervoted = false;
System.Data.SqlClient.SqlDataReader rdr = comm.ExecuteReader(); using (var reader = comm.ExecuteReader())
while (rdr.Read())
{ {
membervoted = true; while (reader.Read())
{
membervoted = true;
}
conn.Close();
} }
conn.Close();
if (membervoted == false)
if (membervoted == false) {
{
%> %>
+9 -9
View File
@@ -1,15 +1,15 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="AspNetMvc" version="3.0.20105.1" targetFramework="net4" /> <package id="AspNetMvc" version="3.0.20105.1" targetFramework="net4" />
<package id="AutoMapper" version="3.0.0" targetFramework="net452" /> <package id="AutoMapper" version="3.3.1" targetFramework="net452" />
<package id="ClientDependency" version="1.9.1" targetFramework="net452" /> <package id="ClientDependency" version="1.9.2" targetFramework="net452" />
<package id="ClientDependency-Mvc" version="1.8.0.0" targetFramework="net451" /> <package id="ClientDependency-Mvc" version="1.8.0.0" targetFramework="net451" />
<package id="ClientDependency-Mvc5" version="1.8.0.0" targetFramework="net452" /> <package id="ClientDependency-Mvc5" version="1.8.0.0" targetFramework="net452" />
<package id="EasyHttp" version="1.6.29.0" targetFramework="net451" /> <package id="EasyHttp" version="1.6.29.0" targetFramework="net451" />
<package id="Examine" version="0.1.69.0" targetFramework="net452" /> <package id="Examine" version="0.1.70.0" targetFramework="net452" />
<package id="HtmlAgilityPack" version="1.4.9" targetFramework="net452" /> <package id="HtmlAgilityPack" version="1.4.9.5" targetFramework="net452" />
<package id="ImageProcessor" version="2.4.4.0" targetFramework="net452" /> <package id="ImageProcessor" version="2.4.5.0" targetFramework="net452" />
<package id="ImageProcessor.Web" version="4.6.4.0" targetFramework="net452" /> <package id="ImageProcessor.Web" version="4.6.6.0" targetFramework="net452" />
<package id="jQuery" version="1.4.1" targetFramework="net451" /> <package id="jQuery" version="1.4.1" targetFramework="net451" />
<package id="jQuery.Validation" version="1.8" targetFramework="net451" /> <package id="jQuery.Validation" version="1.8" targetFramework="net451" />
<package id="jQuery.Validation.Unobtrusive" version="2.0.20710.0" targetFramework="net451" /> <package id="jQuery.Validation.Unobtrusive" version="2.0.20710.0" targetFramework="net451" />
@@ -50,9 +50,9 @@
<package id="SharpZipLib" version="0.86.0" targetFramework="net452" /> <package id="SharpZipLib" version="0.86.0" targetFramework="net452" />
<package id="System.Collections.Immutable" version="1.1.36" targetFramework="net452" /> <package id="System.Collections.Immutable" version="1.1.36" targetFramework="net452" />
<package id="System.Reflection.Metadata" version="1.0.21" targetFramework="net452" /> <package id="System.Reflection.Metadata" version="1.0.21" targetFramework="net452" />
<package id="Umbraco.ModelsBuilder" version="3.0.4" targetFramework="net452" /> <package id="Umbraco.ModelsBuilder" version="3.0.5" targetFramework="net452" />
<package id="UmbracoCms" version="7.5.3" targetFramework="net452" /> <package id="UmbracoCms" version="7.5.5" targetFramework="net452" />
<package id="UmbracoCms.Core" version="7.5.3" targetFramework="net452" /> <package id="UmbracoCms.Core" version="7.5.5" targetFramework="net452" />
<package id="UmbracoCms.IdentityExtensions" version="1.0.0" targetFramework="net451" /> <package id="UmbracoCms.IdentityExtensions" version="1.0.0" targetFramework="net451" />
<package id="UmbracoCms.IdentityExtensions.Google" version="1.0.0" targetFramework="net451" /> <package id="UmbracoCms.IdentityExtensions.Google" version="1.0.0" targetFramework="net451" />
<package id="UrlRewritingNet" version="2.0.7" targetFramework="net452" /> <package id="UrlRewritingNet" version="2.0.7" targetFramework="net452" />
@@ -118,6 +118,8 @@
<div class="umb-panel-body with-footer"> <div class="umb-panel-body with-footer">
<umb-file-dropzone <umb-file-dropzone
ng-if="acceptedMediatypes.length > 0"
accepted-mediatypes="acceptedMediatypes"
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"
@@ -18,18 +18,9 @@
</umb-control-group> </umb-control-group>
<umb-control-group label="@content_target"> <umb-control-group label="@content_target">
<select class="umb-editor umb-dropdown" ng-model="model.target.target"> <label class="checkbox no-indent">
<option value=""></option> <input type="checkbox" ng-model="model.target.target" ng-true-value="_blank" ng-false-value="" /> <localize key="defaultdialogs_openInNewWindow">Opens the linked document in a new window or tab</localize>
<option value="_blank"> </label>
<localize key="defaultdialogs_openInNewWindow">Opens the linked document in a new window or tab</localize>
</option>
<option value="_top">
<localize key="defaultdialogs_openInFullBody">Opens the linked document in the full body of the window</localize>
</option>
<option value="_parent">
<localize key="defaultdialogs_openInParentFrame">Opens the linked document in the parent frame</localize>
</option>
</select>
</umb-control-group> </umb-control-group>
<div class="umb-control-group"> <div class="umb-control-group">
@@ -63,6 +63,8 @@
</div> </div>
<umb-file-dropzone <umb-file-dropzone
ng-if="acceptedMediatypes.length > 0"
accepted-mediatypes="acceptedMediatypes"
parent-id="{{currentFolder.id}}" parent-id="{{currentFolder.id}}"
files-uploaded="onUploadComplete" files-uploaded="onUploadComplete"
files-queued="onFilesQueue" files-queued="onFilesQueue"
@@ -0,0 +1,15 @@
<div ng-controller="Umbraco.Overlays.MediaTypePickerController">
<ul class="umb-card-grid">
<li
ng-repeat="mediatype in model.acceptedMediatypes | orderBy:'name'"
ng-click="select(mediatype)"
class="-three-in-row">
<a class="umb-card-grid-item" href="" title="{{mediatype.name}}">
<i class="{{ mediatype.icon }}"></i>
{{ mediatype.name }}
</a>
</li>
</ul>
</div>
@@ -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" />
@@ -98,4 +98,11 @@
</ng-form> </ng-form>
<umb-overlay
ng-if="mediatypepickerOverlay.show"
model="mediatypepickerOverlay"
view="mediatypepickerOverlay.view"
position="right">
</umb-overlay>
</div> </div>
@@ -51,13 +51,14 @@
</div> </div>
<umb-pane> <umb-pane>
<umb-control-group label="Relate to original"> <umb-control-group localize="label" label="@defaultdialogs_relateToOriginalLabel">
<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 localize="label" label="@defaultdialogs_includeDescendants">
<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>
@@ -3,7 +3,9 @@
<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 <localize key="actions_chooseWhereToMove">Choose where to move</localize>
<strong>{{currentNode.name}}</strong>
<localize key="actions_toInTheTreeStructureBelow">to in the tree structure below</localize>
</p> </p>
<div class="umb-loader-wrapper" ng-show="busy"> <div class="umb-loader-wrapper" ng-show="busy">
@@ -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">
<!-- areas -->
<div ng-repeat="area in row.areas"
class="{{'span' + area.grid + ' column dash-area'}}">
<div class="dash-inner-area">
<!-- Controls -->
<div ng-repeat="control in area.controls" class="dash-control dash-control-{{control.alias}}">
<div class="dash-inner-control">
<div ng-bind-html-unsafe="control.html"></div>
</div>
</div>
<!-- Controls end -->
</div>
</div>
<!-- Area end -->
</div>
</div>
</div>
<!-- Section end -->
</div>
</div>
<!-- grid container end -->
<a href="http://umbraco.tv/?utm_source=core&utm_medium=dashboard&utm_content=header&utm_campaign=tv" target="_blank" class="btn-link -underline"> <!-- Default content in case we cannot fetch content from the outside -->
<h4> <strong>Umbraco.TV - Learn from the source!</strong> </h4> <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;">
<p style="line-height: 1.5;"> <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>
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> </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>
<div class="row">
<div class="span4">
<a href="https://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>
<a href="https://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="https://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="https://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>
<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>
@@ -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>
@@ -3,8 +3,10 @@
<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 <localize key="actions_chooseWhereToMove">Choose where to move</localize>
</p> <strong>{{currentNode.name}}</strong>
<localize key="actions_toInTheTreeStructureBelow">to in the tree structure below</localize>
</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>
@@ -37,10 +37,8 @@
- <localize key="media_orClickHereToUpload">or click here to choose files</localize> - <localize key="media_orClickHereToUpload">or click here to choose files</localize>
</div> </div>
<div class="umb-info-local-item text-error" ng-if="vm.zipFile.uploadStatus === 'error'">
{{vm.zipFile.serverErrorMessage}}
</div>
</div> </div>
</div> </div>
@@ -53,6 +51,41 @@
</div> </div>
</div> </div>
<div ng-if="vm.state === 'uploading'">
<umb-editor-sub-header>
<umb-editor-sub-header-content-left>
<a class="umb-package-details__back-link" href="" ng-click="vm.state = 'upload'">&larr; Upload another package</a>
</umb-editor-sub-header-content-left>
</umb-editor-sub-header>
<div class="umb-packages-view-wrapper">
<div class="flex items-center justify-center">
<div class="umb-info-local-items">
<div class="umb-package-icon">
<i ng-if="!vm.localPackage.iconUrl" class="icon-box"></i>
</div>
<div class="umb-package-info">
<h4 class="umb-info-local-item"><strong>Uploading package</strong></h4>
<umb-progress-bar
percentage="{{vm.zipFile.uploadProgress}}">
</umb-progress-bar>
<div class="umb-info-local-item text-error mt3" ng-if="vm.zipFile.uploadStatus === 'error'">
{{ vm.zipFile.serverErrorMessage }}
</div>
</div>
</div>
</div>
</div>
</div>
<div ng-if="vm.state === 'packageDetails'"> <div ng-if="vm.state === 'packageDetails'">
<umb-editor-sub-header> <umb-editor-sub-header>
@@ -126,6 +159,19 @@
<p>{{vm.installState.status}}</p> <p>{{vm.installState.status}}</p>
</div> </div>
<div class="umb-info-local-item text-info"
ng-show="vm.installCompleted">
<button type="button"
class="btn btn-success flex-inline mt3"
ng-click="vm.reloadPage()">
Finish
</button>
</div>
</div> </div>
</form> </form>
@@ -199,7 +199,7 @@
<div class="umb-package-details__information-item" ng-if="vm.package.created"> <div class="umb-package-details__information-item" ng-if="vm.package.created">
<div class="umb-package-details__information-item-label">Created:</div> <div class="umb-package-details__information-item-label">Created:</div>
<div class="umb-package-details__information-item-content">{{vm.package.created}}</div> <div class="umb-package-details__information-item-content">{{vm.package.created | date:'yyyy-MM-dd HH:mm:ss'}}</div>
</div> </div>
<div class="umb-package-details__information-item" ng-if="vm.package.latestVersion"> <div class="umb-package-details__information-item" ng-if="vm.package.latestVersion">
@@ -340,6 +340,16 @@
<p>{{vm.installState.status}}</p> <p>{{vm.installState.status}}</p>
</div> </div>
<div class="umb-info-local-item text-info"
ng-show="vm.installCompleted">
<button type="button"
class="btn btn-success flex-inline mt3"
ng-click="vm.reloadPage()">
Finish
</button>
</div>
</div> </div>
</form> </form>
@@ -1,7 +1,7 @@
<ul class="unstyled"> <ul class="unstyled">
<li ng-repeat="preval in model.prevalues"> <li ng-repeat="preval in model.prevalues">
<label class="checkbox"> <label class="checkbox">
<input type="radio" ng-model="model.value" value="{{preval}}" /> {{preval}} <input type="radio" ng-model="model.value" value="{{preval.value || preval}}" /> {{preval.label || preval.value || preval}}
</label> </label>
</li> </li>
</ul> </ul>
@@ -35,17 +35,24 @@
<div ng-if="currentSection" style="padding-bottom: 50px;"> <div ng-if="currentSection" style="padding-bottom: 50px;">
<umb-control-group label="@general_width"> <umb-control-group label="@general_width">
<div class="grid-size-scaler" > <div class="grid-size-scaler">
<a href ng-click="scaleDown(currentSection)"> <a href ng-click="scaleDown(currentSection)">
<i class="icon icon-navigation-down"></i> <i class="icon icon-remove"></i>
</a> </a>
{{currentSection.grid}} {{currentSection.grid}}
<a href ng-click="scaleUp(currentSection, availableLayoutSpace)"> <a href ng-click="scaleUp(currentSection, availableLayoutSpace)">
<i class="icon icon-navigation-up"></i> <i class="icon icon-add"></i>
</a> </a>
</div> </div>
</umb-control-group> </umb-control-group>
<umb-control-group hide-label="true">
<i class="icon-delete red"></i>
<a class="btn btn-small btn-link" href="" ng-click="deleteSection(currentSection, currentLayout)">
<localize key="general_delete" class="ng-isolate-scope ng-scope">Delete</localize>
</a>
</umb-control-group>
<umb-control-group hide-label="true"> <umb-control-group hide-label="true">
<ul class="unstyled"> <ul class="unstyled">
@@ -6,10 +6,15 @@
<p><localize key="grid_addRowConfigurationDetail" /></p> <p><localize key="grid_addRowConfigurationDetail" /></p>
<div class="alert alert-warn ng-scope" ng-show="nameChanged"> <div class="alert alert-warn ng-scope" ng-show="nameChanged">
Modifying a row configuration name will result in loss of <p>Modifying a row configuration name will result in loss of
data for any existing content that is based on this configuration. data for any existing content that is based on this configuration.</p>
<p><strong>Modifying only the label will not result in data loss.</strong></p>
</div> </div>
<umb-control-group label="@general_label">
<input type="text" ng-model="currentRow.label" placeholder="Overrides name" />
</umb-control-group>
<umb-control-group label="@general_name"> <umb-control-group label="@general_name">
<input type="text" ng-model="currentRow.name" /> <input type="text" ng-model="currentRow.name" />
</umb-control-group> </umb-control-group>
@@ -39,19 +44,23 @@
<div ng-if="currentCell" style="padding-bottom: 50px;"> <div ng-if="currentCell" style="padding-bottom: 50px;">
<umb-control-group label="@general_width"> <umb-control-group label="@general_width">
<div class="grid-size-scaler" > <div class="grid-size-scaler">
<div class="grid-size-scaler"> <a href ng-click="scaleDown(currentCell)">
<a href ng-click="scaleDown(currentCell)"> <i class="icon icon-remove"></i>
<i class="icon icon-remove"></i> </a>
</a>
{{currentCell.grid}} {{currentCell.grid}}
<a href ng-click="scaleUp(currentCell, availableRowSpace, true)"> <a href ng-click="scaleUp(currentCell, availableRowSpace, true)">
<i class="icon icon-add"></i> <i class="icon icon-add"></i>
</a> </a>
</div> </div>
</div>
</umb-control-group> </umb-control-group>
<umb-control-group hide-label="true">
<i class="icon-delete red"></i>
<a class="btn btn-small btn-link" href="" ng-click="deleteArea(currentCell, currentRow)">
<localize key="general_delete" class="ng-isolate-scope ng-scope">Delete</localize>
</a>
</umb-control-group>
<umb-control-group hide-label="true"> <umb-control-group hide-label="true">
<ul class="unstyled"> <ul class="unstyled">
@@ -80,7 +80,7 @@
<div class="umb-row-title-bar"> <div class="umb-row-title-bar">
<div class=".umb-grid-right"> <div class=".umb-grid-right">
<div class="umb-row-title">{{row.name}}</div> <div class="umb-row-title">{{row.label || row.name}}</div>
<div class="umb-grid-has-config" ng-if="row.hasConfig && !sortMode"> <div class="umb-grid-has-config" ng-if="row.hasConfig && !sortMode">
<localize key="grid_settingsApplied" /> <localize key="grid_settingsApplied" />
@@ -282,7 +282,7 @@
<div class="preview-overlay"> <div class="preview-overlay">
</div> </div>
<small>{{layout.name}}</small> <small>{{layout.label || layout.name}}</small>
</div> <!-- .templates-preview-rows --> </div> <!-- .templates-preview-rows -->
@@ -72,7 +72,7 @@
</div> </div>
<div> <div>
{{layout.name}}<br /> {{layout.label || layout.name}}<br />
<i class="icon-delete red"></i> <i class="icon-delete red"></i>
<a class="btn btn-small btn-link" href ng-click="deleteLayout($index)"> <a class="btn btn-small btn-link" href ng-click="deleteLayout($index)">
<localize key="general_delete" /> <localize key="general_delete" />
@@ -44,7 +44,7 @@
center="model.value.focalPoint" center="model.value.focalPoint"
on-image-loaded="imageLoaded"> on-image-loaded="imageLoaded">
</umb-image-gravity> </umb-image-gravity>
<a href class="btn btn-link btn-crop-delete" ng-show="imageIsLoaded" ng-click="clear()"><i class="icon-delete red"></i> <localize key="content_uploadClear">Remove file</localize></a> <a href class="btn btn-link btn-crop-delete" ng-click="clear()"><i class="icon-delete red"></i> <localize key="content_uploadClear">Remove file</localize></a>
</div> </div>
<ul class="umb-sortable-thumbnails cropList clearfix"> <ul class="umb-sortable-thumbnails cropList clearfix">
@@ -39,7 +39,8 @@
on-drag-enter="vm.dragEnter()"> on-drag-enter="vm.dragEnter()">
<umb-file-dropzone <umb-file-dropzone
ng-if="!vm.isRecycleBin" ng-if="!vm.isRecycleBin && vm.acceptedMediatypes.length > 0"
accepted-mediatypes="vm.acceptedMediatypes"
parent-id="{{vm.nodeId}}" parent-id="{{vm.nodeId}}"
files-uploaded="vm.onUploadComplete" files-uploaded="vm.onUploadComplete"
accept="{{vm.acceptedFileTypes}}" accept="{{vm.acceptedFileTypes}}"
@@ -9,7 +9,8 @@
on-drag-enter="vm.dragEnter()"> on-drag-enter="vm.dragEnter()">
<umb-file-dropzone <umb-file-dropzone
ng-if="!vm.isRecycleBin" ng-if="!vm.isRecycleBin && vm.acceptedMediatypes.length > 0"
accepted-mediatypes="vm.acceptedMediatypes"
parent-id="{{vm.nodeId}}" parent-id="{{vm.nodeId}}"
files-uploaded="vm.onUploadComplete" files-uploaded="vm.onUploadComplete"
accept="{{vm.acceptedFileTypes}}" accept="{{vm.acceptedFileTypes}}"
@@ -4,14 +4,14 @@
<li style="width: 120px; height: 100px; overflow: hidden;" ng-repeat="image in images"> <li style="width: 120px; height: 100px; overflow: hidden;" ng-repeat="image in images">
<!-- IMAGE --> <!-- IMAGE -->
<img ng-src="{{image.thumbnail}}" alt="" ng-show="image.thumbnail" /> <img ng-src="{{image.thumbnail}}" alt="" ng-show="image.thumbnail" title="{{image.name}}" />
<!-- SVG --> <!-- SVG -->
<img ng-if="image.metaData.umbracoExtension.Value === 'svg'" ng-src="{{image.metaData.umbracoFile.Value}}" alt="" /> <img ng-if="image.metaData.umbracoExtension.Value === 'svg'" ng-src="{{image.metaData.umbracoFile.Value}}" alt="" title="{{image.name}}" />
<img ng-if="image.extension === 'svg'" ng-src="{{image.file}}" alt="" /> <img ng-if="image.extension === 'svg'" ng-src="{{image.file}}" alt="" />
<!-- FILE --> <!-- FILE -->
<span class="icon-holder" ng-hide="image.thumbnail || image.metaData.umbracoExtension.Value === 'svg' || image.extension === 'svg'"> <span class="umb-icon-holder" ng-hide="image.thumbnail || image.metaData.umbracoExtension.Value === 'svg' || image.extension === 'svg'">
<i class="icon {{image.icon}} large"></i> <i class="icon {{image.icon}} large"></i>
<small>{{image.name}}</small> <small>{{image.name}}</small>
</span> </span>
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+131 -89
View File
@@ -30,6 +30,9 @@
<key alias="refreshNode">Genindlæs elementer</key> <key alias="refreshNode">Genindlæs elementer</key>
<key alias="republish">Genudgiv hele sitet</key> <key alias="republish">Genudgiv hele sitet</key>
<key alias="restore" version="7.3.0">Gendan</key> <key alias="restore" version="7.3.0">Gendan</key>
<key alias="SetPermissionsForThePage">Sæt rettigheder for siden %0%</key>
<key alias="chooseWhereToMove">Hvor vil du flytte</key>
<key alias="toInTheTreeStructureBelow">hen til i træstrukturen?</key>
<key alias="rights">Rettigheder</key> <key alias="rights">Rettigheder</key>
<key alias="rollback">Fortryd ændringer</key> <key alias="rollback">Fortryd ændringer</key>
<key alias="sendtopublish">Send til udgivelse</key> <key alias="sendtopublish">Send til udgivelse</key>
@@ -274,17 +277,11 @@
<key alias="treepicker">Vælg</key> <key alias="treepicker">Vælg</key>
<key alias="viewCacheItem">Se cache element</key> <key alias="viewCacheItem">Se cache element</key>
<key alias="createFolder">Opret mappe...</key> <key alias="createFolder">Opret mappe...</key>
<key alias="relateToOriginalLabel">Relatér til original</key> <key alias="relateToOriginalLabel">Relatér til original</key>
<key alias="includeDescendants">Inkludér undersider</key>
<key alias="linkToPage">Link til side</key> <key alias="linkToPage">Link til side</key>
<key alias="openInNewWindow">Åben linket i et nyt vindue eller fane</key>
<key alias="openInNewWindow">Åbner det linket dokument i et nyt vindue eller fane</key>
<key alias="openInFullBody">Åbner det linket dokument i fuld visning af vinduet</key>
<key alias="openInParentFrame">Åbner det linket dokument i "parent frame"</key>
<key alias="linkToMedia">Link til medie</key> <key alias="linkToMedia">Link til medie</key>
<key alias="selectMedia">Vælg medie</key> <key alias="selectMedia">Vælg medie</key>
<key alias="selectIcon">Vælg ikon</key> <key alias="selectIcon">Vælg ikon</key>
<key alias="selectItem">Vælg item</key> <key alias="selectItem">Vælg item</key>
@@ -293,19 +290,25 @@
<key alias="selectContent">Vælg indhold</key> <key alias="selectContent">Vælg indhold</key>
<key alias="selectMember">Vælg medlem</key> <key alias="selectMember">Vælg medlem</key>
<key alias="selectMemberGroup">Vælg medlemsgruppe</key> <key alias="selectMemberGroup">Vælg medlemsgruppe</key>
<key alias="noMacroParams">Der er ingen parametre for denne makro</key> <key alias="noMacroParams">Der er ingen parametre for denne makro</key>
<key alias="linkYour">Link dit</key> <key alias="linkYour">Link dit</key>
<key alias="unLinkYour">Fjern link fra dit</key> <key alias="unLinkYour">Fjern link fra dit</key>
<key alias="account">konto</key> <key alias="account">konto</key>
<key alias="selectEditor">Vælg editor</key> <key alias="selectEditor">Vælg editor</key>
</area> </area>
<area alias="dictionaryItem"> <area alias="dictionaryItem">
<key alias="description">Rediger de forskellige sprogversioner for ordbogselementet '%0%' herunder. Du tilføjer flere sprog under 'sprog' i menuen til venstre </key> <key alias="description">
<![CDATA[
Rediger de forskellige sprogversioner for ordbogselementet '%0%' herunder.<br />Du tilføjer flere sprog under 'sprog' i menuen til venstre </key>
]]>
</key>
<key alias="displayName">Kulturnavn</key> <key alias="displayName">Kulturnavn</key>
<key alias="changeKey">Rediger navnet på ordbogselementet.</key>
<key alias="changeKeyError">
<![CDATA[
Navnet '%0%' eksisterer allerede.
]]>
</key>
</area> </area>
<area alias="placeholders"> <area alias="placeholders">
<key alias="username">Indtast dit brugernavn</key> <key alias="username">Indtast dit brugernavn</key>
@@ -319,17 +322,17 @@
<key alias="enterTags">Indtast nøgleord (tryk på Enter efter hvert nøgleord)...</key> <key alias="enterTags">Indtast nøgleord (tryk på Enter efter hvert nøgleord)...</key>
</area> </area>
<area alias="editcontenttype"> <area alias="editcontenttype">
<key alias="allowAtRoot" version="7.2">Tillad på rodniveau</key> <key alias="allowAtRoot" version="7.2">Tillad på rodniveau</key>
<key alias="allowAtRootDesc" version="7.2">Kun dokumenttyper med denne indstilling aktiveret oprettes i rodniveau under Inhold og Mediearkiv</key> <key alias="allowAtRootDesc" version="7.2">Kun dokumenttyper med denne indstilling aktiveret oprettes i rodniveau under Inhold og Mediearkiv</key>
<key alias="allowedchildnodetypes">Tilladte typer</key> <key alias="allowedchildnodetypes">Tilladte typer</key>
<key alias="contenttypecompositions">Sammensætning af dokumenttyper</key> <key alias="contenttypecompositions">Sammensætning af dokumenttyper</key>
<key alias="create">Opret</key> <key alias="create">Opret</key>
<key alias="deletetab">Slet fane</key> <key alias="deletetab">Slet fane</key>
<key alias="description">Beskrivelse</key> <key alias="description">Beskrivelse</key>
<key alias="newtab">Ny fane</key> <key alias="newtab">Ny fane</key>
<key alias="tab">Fane</key> <key alias="tab">Fane</key>
<key alias="thumbnail">Thumbnail</key> <key alias="thumbnail">Thumbnail</key>
<key alias="hasListView">Aktiver listevisning</key> <key alias="hasListView">Aktiver listevisning</key>
<key alias="hasListViewDesc" version="7.2">Viser undersider i en søgbar liste, undersider vises ikke i indholdstræet</key> <key alias="hasListViewDesc" version="7.2">Viser undersider i en søgbar liste, undersider vises ikke i indholdstræet</key>
<key alias="currentListView" version="7.2">Nuværende listevisning</key> <key alias="currentListView" version="7.2">Nuværende listevisning</key>
<key alias="currentListViewDesc" version="7.2">Den aktive listevisningsdatatype</key> <key alias="currentListViewDesc" version="7.2">Den aktive listevisningsdatatype</key>
@@ -364,7 +367,7 @@
</area> </area>
<area alias="errors"> <area alias="errors">
<key alias="receivedErrorFromServer">Der skete en fejl på severen</key> <key alias="receivedErrorFromServer">Der skete en fejl på severen</key>
<key alias="dissallowedMediaType">Denne filttype er blevet deaktiveret af administratoren</key> <key alias="dissallowedMediaType">Denne filttype er blevet deaktiveret af administratoren</key>
<key alias="codemirroriewarning">OBS! Selvom CodeMirror er slået til i konfigurationen, så er den deaktiveret i Internet Explorer fordi den ikke er stabil nok.</key> <key alias="codemirroriewarning">OBS! Selvom CodeMirror er slået til i konfigurationen, så er den deaktiveret i Internet Explorer fordi den ikke er stabil nok.</key>
<key alias="contentTypeAliasAndNameNotNull">Du skal udfylde både Alias &amp; Navn på den nye egenskabstype!</key> <key alias="contentTypeAliasAndNameNotNull">Du skal udfylde både Alias &amp; Navn på den nye egenskabstype!</key>
<key alias="filePermissionsError">Der mangler læse/skrive rettigheder til bestemte filer og mapper</key> <key alias="filePermissionsError">Der mangler læse/skrive rettigheder til bestemte filer og mapper</key>
@@ -380,7 +383,7 @@
<key alias="tableSplitNotSplittable">Du kan ikke opdele en celle, som ikke allerede er delt.</key> <key alias="tableSplitNotSplittable">Du kan ikke opdele en celle, som ikke allerede er delt.</key>
<key alias="xsltErrorHeader">Fejl i XSLT kode</key> <key alias="xsltErrorHeader">Fejl i XSLT kode</key>
<key alias="xsltErrorText">Din XSLT er ikke opdateret, da det indeholdt en fejl</key> <key alias="xsltErrorText">Din XSLT er ikke opdateret, da det indeholdt en fejl</key>
<key alias="missingPropertyEditorErrorMessage">Der er et problem med den datatype, der bruges til denn egenskab. Kontroller konfigurationen og prøv igen.</key> <key alias="missingPropertyEditorErrorMessage">Der er et problem med den datatype, der bruges til denn egenskab. Kontroller konfigurationen og prøv igen.</key>
</area> </area>
<area alias="general"> <area alias="general">
<key alias="about">Om</key> <key alias="about">Om</key>
@@ -466,7 +469,8 @@
<key alias="showPageOnSend">Hvilken side skal vises efter at formularen er sendt</key> <key alias="showPageOnSend">Hvilken side skal vises efter at formularen er sendt</key>
<key alias="size">Størrelse</key> <key alias="size">Størrelse</key>
<key alias="sort">Sortér</key> <key alias="sort">Sortér</key>
<key alias="submit">Indsend</key> <!-- TODO: Translate this --> <key alias="submit">Indsend</key>
<!-- TODO: Translate this -->
<key alias="type">Type</key> <key alias="type">Type</key>
<key alias="typeToSearch">Skriv for at søge...</key> <key alias="typeToSearch">Skriv for at søge...</key>
<key alias="up">Op</key> <key alias="up">Op</key>
@@ -505,22 +509,22 @@
</area> </area>
<area alias="shortcuts"> <area alias="shortcuts">
<key alias="addTab">Tilføj fane</key> <key alias="addTab">Tilføj fane</key>
<key alias="addProperty">Tilføj egenskab</key> <key alias="addProperty">Tilføj egenskab</key>
<key alias="addEditor">Tilføj editor</key> <key alias="addEditor">Tilføj editor</key>
<key alias="addTemplate">Tilføj skabelon</key> <key alias="addTemplate">Tilføj skabelon</key>
<key alias="addChildNode">Tilføj child node</key> <key alias="addChildNode">Tilføj child node</key>
<key alias="addChild">Tilføj child</key> <key alias="addChild">Tilføj child</key>
<key alias="editDataType">Rediger datatype</key> <key alias="editDataType">Rediger datatype</key>
<key alias="navigateSections">Naviger sektioner</key> <key alias="navigateSections">Naviger sektioner</key>
<key alias="shortcut">Genveje</key> <key alias="shortcut">Genveje</key>
<key alias="showShortcuts">Vis genveje</key> <key alias="showShortcuts">Vis genveje</key>
<key alias="toggleListView">Brug listevisning</key> <key alias="toggleListView">Brug listevisning</key>
<key alias="toggleAllowAsRoot">Tillad på rodniveau</key> <key alias="toggleAllowAsRoot">Tillad på rodniveau</key>
</area> </area>
<area alias="graphicheadline"> <area alias="graphicheadline">
@@ -538,13 +542,17 @@
<key alias="databaseErrorWebConfig">Kunne ikke gemme web.config filen. Du bedes venligst manuelt ændre database forbindelses strengen.</key> <key alias="databaseErrorWebConfig">Kunne ikke gemme web.config filen. Du bedes venligst manuelt ændre database forbindelses strengen.</key>
<key alias="databaseFound">Din database er blevet fundet og identificeret som</key> <key alias="databaseFound">Din database er blevet fundet og identificeret som</key>
<key alias="databaseHeader">Database konfiguration</key> <key alias="databaseHeader">Database konfiguration</key>
<key alias="databaseInstall"><![CDATA[ <key alias="databaseInstall">
<![CDATA[
Klik på <strong>installér</strong> knappen for at installere Umbraco %0% databasen Klik på <strong>installér</strong> knappen for at installere Umbraco %0% databasen
]]></key> ]]>
</key>
<key alias="databaseInstall"><![CDATA[Tryk på <strong>installér</strong> knappen for at installere Umbraco %0% databasen]]></key> <key alias="databaseInstall"><![CDATA[Tryk på <strong>installér</strong> knappen for at installere Umbraco %0% databasen]]></key>
<key alias="databaseInstallDone"><![CDATA[Umbraco %0% er nu blevet kopieret til din database. Tryk på <string>Næste</strong> for at fortsætte.]]></key> <key alias="databaseInstallDone"><![CDATA[Umbraco %0% er nu blevet kopieret til din database. Tryk på <string>Næste</strong> for at fortsætte.]]></key>
<key alias="databaseNotFound"><![CDATA[<p>Databasen er ikke fundet. Kontrollér venligst at informationen i database forbindelsesstrengen i "web.config" filen er korrekt.</p> <key alias="databaseNotFound">
<p>For at fortsætte bedes du venligst rette "web.config" filen (ved at bruge Visual Studio eller dit favoritprogram), scroll til bunden, tilføj forbindelsesstrengen til din database i feltet som hedder "umbracoDbDSN" og gem filen.</p><p>Klik på <strong>Forsøg igen</strong> knappen når du er færdig.<br/><a href="http://our.umbraco.org/documentation/Using-Umbraco/Config-files/webconfig7" target="_blank">Mere information om at redigere web.config her.</a></p>]]></key> <![CDATA[<p>Databasen er ikke fundet. Kontrollér venligst at informationen i database forbindelsesstrengen i "web.config" filen er korrekt.</p>
<p>For at fortsætte bedes du venligst rette "web.config" filen (ved at bruge Visual Studio eller dit favoritprogram), scroll til bunden, tilføj forbindelsesstrengen til din database i feltet som hedder "umbracoDbDSN" og gem filen.</p><p>Klik på <strong>Forsøg igen</strong> knappen når du er færdig.<br/><a href="http://our.umbraco.org/documentation/Using-Umbraco/Config-files/webconfig7" target="_blank">Mere information om at redigere web.config her.</a></p>]]>
</key>
<key alias="databaseText"><![CDATA[For at afslutte dette skridt er du nødt til at have nogle informationer om din database parat ("database forbindelsesstrengen").<br/>Kontakt venligst din ISP hvis det er nødvendigt. Hvis du installerer på en lokal maskine eller server kan du muligvis få informationerne fra din systemadministrator.]]></key> <key alias="databaseText"><![CDATA[For at afslutte dette skridt er du nødt til at have nogle informationer om din database parat ("database forbindelsesstrengen").<br/>Kontakt venligst din ISP hvis det er nødvendigt. Hvis du installerer på en lokal maskine eller server kan du muligvis få informationerne fra din systemadministrator.]]></key>
<key alias="databaseUpgrade"><![CDATA[<p>Tryk på <strong>Opgradér</strong> knappen for at opgradere din database til Umbraco %0%</p><p>Bare rolig - intet indhold vil blive slettet og alt vil stadig fungere bagefter!</p>]]></key> <key alias="databaseUpgrade"><![CDATA[<p>Tryk på <strong>Opgradér</strong> knappen for at opgradere din database til Umbraco %0%</p><p>Bare rolig - intet indhold vil blive slettet og alt vil stadig fungere bagefter!</p>]]></key>
<key alias="databaseUpgradeDone"><![CDATA[Din database er blevet opgraderet til den endelige version %0%.<br/>Tryk på <strong>Næste</strong> for at fortsætte.]]></key> <key alias="databaseUpgradeDone"><![CDATA[Din database er blevet opgraderet til den endelige version %0%.<br/>Tryk på <strong>Næste</strong> for at fortsætte.]]></key>
@@ -590,8 +598,10 @@
<key alias="theEndFurtherHelp"><![CDATA[<h3>Yderligere hjælpe og informationer</h3> Få hjælp fra vores prisvindende fællesskab, gennemse dokumentationen eller se nogle gratis videoer om hvordan du opsætter et simpelt site, hvordan du bruger pakker og en 'quick guide' til Umbraco terminologier]]></key> <key alias="theEndFurtherHelp"><![CDATA[<h3>Yderligere hjælpe og informationer</h3> Få hjælp fra vores prisvindende fællesskab, gennemse dokumentationen eller se nogle gratis videoer om hvordan du opsætter et simpelt site, hvordan du bruger pakker og en 'quick guide' til Umbraco terminologier]]></key>
<key alias="theEndHeader">Umbraco %0% er installeret og klar til brug</key> <key alias="theEndHeader">Umbraco %0% er installeret og klar til brug</key>
<key alias="theEndInstallFailed"><![CDATA[For at afslutte installationen er du nødt til manuelt at rette <strong>/web.config filen</strong> og opdatére 'AppSetting' feltet <strong>UmbracoConfigurationStatus</strong> i bunden til <strong>'%0%'</strong>.]]></key> <key alias="theEndInstallFailed"><![CDATA[For at afslutte installationen er du nødt til manuelt at rette <strong>/web.config filen</strong> og opdatére 'AppSetting' feltet <strong>UmbracoConfigurationStatus</strong> i bunden til <strong>'%0%'</strong>.]]></key>
<key alias="theEndInstallSuccess"><![CDATA[Du kan <strong>komme igang med det samme</strong> ved at klikke på "Start Umbraco" knappen nedenfor.<br/>Hvis du er <strong>ny med Umbraco</strong>, kan du finde masser af ressourcer på vores 'getting started' sider. <key alias="theEndInstallSuccess">
]]></key> <![CDATA[Du kan <strong>komme igang med det samme</strong> ved at klikke på "Start Umbraco" knappen nedenfor.<br/>Hvis du er <strong>ny med Umbraco</strong>, kan du finde masser af ressourcer på vores 'getting started' sider.
]]>
</key>
<key alias="theEndOpenUmbraco"><![CDATA[<h3>Start Umbraco</h3>For at administrere dit website skal du blot åbne Umbraco administrationen og begynde at tilføje indhold, opdatere skabelonerne og stylesheets'ene eller tilføje ny funktionalitet.]]></key> <key alias="theEndOpenUmbraco"><![CDATA[<h3>Start Umbraco</h3>For at administrere dit website skal du blot åbne Umbraco administrationen og begynde at tilføje indhold, opdatere skabelonerne og stylesheets'ene eller tilføje ny funktionalitet.]]></key>
<key alias="Unavailable">Forbindelse til databasen fejlede.</key> <key alias="Unavailable">Forbindelse til databasen fejlede.</key>
<key alias="Version3">Umbraco Version 3</key> <key alias="Version3">Umbraco Version 3</key>
@@ -666,12 +676,15 @@ Gå til http://%4%/#/content/content/edit/%5% for at redigere.
Ha' en dejlig dag! Ha' en dejlig dag!
Mange hilsner fra Umbraco robotten Mange hilsner fra Umbraco robotten
]]></key> ]]>
<key alias="mailBodyHtml"><![CDATA[<p>Hej %0%</p> </key>
<key alias="mailBodyHtml">
<![CDATA[<p>Hej %0%</p>
<p>Dette er en automatisk mail for at informere dig om at opgaven <strong>'%1%'</strong> <p>Dette er en automatisk mail for at informere dig om at opgaven <strong>'%1%'</strong>
er blevet udførtpå siden <a href="http://%4%/#/content/content/edit/%5%"><strong>'%2%'</strong></a> af brugeren <strong>'%3%'</strong> </p> er blevet udførtpå siden <a href="http://%4%/#/content/content/edit/%5%"><strong>'%2%'</strong></a> af brugeren <strong>'%3%'</strong> </p>
<div style="margin: 8px 0; padding: 8px; display: block;"> <br /> <div style="margin: 8px 0; padding: 8px; display: block;"> <br />
<a style="color: white; font-weight: bold; background-color: #5372c3; text-decoration : none; margin-right: 20px; border: 8px solid #5372c3; width: 150px;" href="http://%4%/#/content/content/edit/%5%">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RET&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a> &nbsp; <br /> </div> <p> <h3>Opdateringssammendrag:</h3> <table style="width: 100%;"> %6% </table> </p> <div style="margin: 8px 0; padding: 8px; display: block;"> <br /> <a style="color: white; font-weight: bold; background-color: #66cc66; text-decoration : none; margin-right: 20px; border: 8px solid #66cc66; width: 150px;" href="http://%4%/actions/publish.aspx?id=%5%">&nbsp;&nbsp;PUBLISÉR&nbsp;&nbsp;</a> &nbsp; <a style="color: white; font-weight: bold; background-color: #5372c3; text-decoration : none; margin-right: 20px; border: 8px solid #5372c3; width: 150px;" href="http://%4%/#/content/content/edit/%5%">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RET&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a> &nbsp; <a style="color: white; font-weight: bold; background-color: #ca4a4a; text-decoration : none; margin-right: 20px; border: 8px solid #ca4a4a; width: 150px;" href="http://%4%/actions/delete.aspx?id=%5%">&nbsp;&nbsp;&nbsp;&nbsp;SLET&nbsp;&nbsp;&nbsp;&nbsp;</a> <br /> </div> <p>Hav en fortsat god dag!<br /><br /> De bedste hilsner fra umbraco robotten </p>]]></key> <a style="color: white; font-weight: bold; background-color: #5372c3; text-decoration : none; margin-right: 20px; border: 8px solid #5372c3; width: 150px;" href="http://%4%/#/content/content/edit/%5%">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RET&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a> &nbsp; <br /> </div> <p> <h3>Opdateringssammendrag:</h3> <table style="width: 100%;"> %6% </table> </p> <div style="margin: 8px 0; padding: 8px; display: block;"> <br /> <a style="color: white; font-weight: bold; background-color: #66cc66; text-decoration : none; margin-right: 20px; border: 8px solid #66cc66; width: 150px;" href="http://%4%/actions/publish.aspx?id=%5%">&nbsp;&nbsp;PUBLISÉR&nbsp;&nbsp;</a> &nbsp; <a style="color: white; font-weight: bold; background-color: #5372c3; text-decoration : none; margin-right: 20px; border: 8px solid #5372c3; width: 150px;" href="http://%4%/#/content/content/edit/%5%">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RET&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a> &nbsp; <a style="color: white; font-weight: bold; background-color: #ca4a4a; text-decoration : none; margin-right: 20px; border: 8px solid #ca4a4a; width: 150px;" href="http://%4%/actions/delete.aspx?id=%5%">&nbsp;&nbsp;&nbsp;&nbsp;SLET&nbsp;&nbsp;&nbsp;&nbsp;</a> <br /> </div> <p>Hav en fortsat god dag!<br /><br /> De bedste hilsner fra umbraco robotten </p>]]>
</key>
<key alias="mailSubject">[%0%] Notificering om %1% udført på %2%</key> <key alias="mailSubject">[%0%] Notificering om %1% udført på %2%</key>
<key alias="notifications">Notificeringer</key> <key alias="notifications">Notificeringer</key>
</area> </area>
@@ -692,8 +705,10 @@ Mange hilsner fra Umbraco robotten
<key alias="packageUninstalledHeader">Pakken blev fjernet</key> <key alias="packageUninstalledHeader">Pakken blev fjernet</key>
<key alias="packageUninstalledText">Pakken er på succefuld vis blevet fjernet</key> <key alias="packageUninstalledText">Pakken er på succefuld vis blevet fjernet</key>
<key alias="packageUninstallHeader">Afinstallér pakke</key> <key alias="packageUninstallHeader">Afinstallér pakke</key>
<key alias="packageUninstallText"><![CDATA[Du kan fjerne markeringen på elementer du ikke ønsker at fjerne, på dette tidspunkt, nedenfor. Når du klikker 'bekræft' vil alle afkrydsede elemenet blive fjernet <br/> <key alias="packageUninstallText">
<span style="color: Red; font-weight: bold;">Bemærk:</span> at dokumenter og medier som afhænger af denne pakke vil muligvis holde op med at virke, så vær forsigtig. Hvis i tvivl, kontakt personen som har udviklet pakken.]]></key> <![CDATA[Du kan fjerne markeringen på elementer du ikke ønsker at fjerne, på dette tidspunkt, nedenfor. Når du klikker 'bekræft' vil alle afkrydsede elemenet blive fjernet <br/>
<span style="color: Red; font-weight: bold;">Bemærk:</span> at dokumenter og medier som afhænger af denne pakke vil muligvis holde op med at virke, så vær forsigtig. Hvis i tvivl, kontakt personen som har udviklet pakken.]]>
</key>
<key alias="packageUpgradeDownload">Download opdatering fra opbevaringsbasen</key> <key alias="packageUpgradeDownload">Download opdatering fra opbevaringsbasen</key>
<key alias="packageUpgradeHeader">Opdatér pakke</key> <key alias="packageUpgradeHeader">Opdatér pakke</key>
<key alias="packageUpgradeInstructions">Opdateringsinstrukser</key> <key alias="packageUpgradeInstructions">Opdateringsinstrukser</key>
@@ -726,6 +741,19 @@ Mange hilsner fra Umbraco robotten
<key alias="paSimpleHelp">Hvis du blot ønsker at opsætte simpel beskyttelse ved hjælp af et enkelt login og kodeord</key> <key alias="paSimpleHelp">Hvis du blot ønsker at opsætte simpel beskyttelse ved hjælp af et enkelt login og kodeord</key>
</area> </area>
<area alias="publish"> <area alias="publish">
<key alias="contentPublishedFailedAwaitingRelease">Udgivelsen kunne ikke udgives da publiceringsdato er sat</key>
<key alias="contentPublishedFailedExpired">
<![CDATA[
%0% Udgivelsen kunne ikke blive publiceret da publiceringsdatoen er overskredet
]]>
</key>
<key alias="contentPublishedFailedInvalid">
<![CDATA[
%0% kunne ikke publiceres da følgende egenskaber : %1% ikke overholdte valderingsreglerne.
]]>
</key>
<key alias="editContentPublishedFailedByParent">Udgivelsen fejlede fordi en overordnet side ikke er publiceret</key>
<key alias="contentPublishedFailedByEvent">%0% kunne ikke udgives, fordi et 3. parts modul annullerede handlingen</key> <key alias="contentPublishedFailedByEvent">%0% kunne ikke udgives, fordi et 3. parts modul annullerede handlingen</key>
<key alias="includeUnpublished">Medtag ikke-udgivede undersider</key> <key alias="includeUnpublished">Medtag ikke-udgivede undersider</key>
<key alias="inProgress">Publicerer - vent venligst...</key> <key alias="inProgress">Publicerer - vent venligst...</key>
@@ -799,58 +827,58 @@ Mange hilsner fra Umbraco robotten
<area alias="contentTypeEditor"> <area alias="contentTypeEditor">
<key alias="compositions">Kompositioner</key> <key alias="compositions">Kompositioner</key>
<key alias="noTabs">Du har ikke tilføjet nogle faner</key> <key alias="noTabs">Du har ikke tilføjet nogle faner</key>
<key alias="addNewTab">Tilføj ny fane</key> <key alias="addNewTab">Tilføj ny fane</key>
<key alias="addAnotherTab">Tilføj endnu en fane</key> <key alias="addAnotherTab">Tilføj endnu en fane</key>
<key alias="inheritedFrom">Nedarvet fra</key> <key alias="inheritedFrom">Nedarvet fra</key>
<key alias="addProperty">Tilføj property</key> <key alias="addProperty">Tilføj property</key>
<key alias="requiredLabel">Påkrævet label</key> <key alias="requiredLabel">Påkrævet label</key>
<key alias="enableListViewHeading">Aktiver listevisning</key> <key alias="enableListViewHeading">Aktiver listevisning</key>
<key alias="enableListViewDescription">Konfigurer indholdet til at blive vist i en sorterbar og søgbar liste, dens børn vil ikke blive vist i træet</key> <key alias="enableListViewDescription">Konfigurer indholdet til at blive vist i en sorterbar og søgbar liste, dens børn vil ikke blive vist i træet</key>
<key alias="allowedTemplatesHeading">Tilladte skabeloner</key> <key alias="allowedTemplatesHeading">Tilladte skabeloner</key>
<key alias="allowedTemplatesDescription">Vælg hvilke skabeloner der er tilladt at bruge på dette indhold</key> <key alias="allowedTemplatesDescription">Vælg hvilke skabeloner der er tilladt at bruge på dette indhold</key>
<key alias="allowAsRootHeading">Tillad på rodniveau</key> <key alias="allowAsRootHeading">Tillad på rodniveau</key>
<key alias="allowAsRootDescription">Kun dokumenttyper med denne indstilling aktiveret oprettes i rodniveau under inhold og mediearkiv</key> <key alias="allowAsRootDescription">Kun dokumenttyper med denne indstilling aktiveret oprettes i rodniveau under inhold og mediearkiv</key>
<key alias="allowAsRootCheckbox">Ja indhold af denne type er tilladt i roden</key> <key alias="allowAsRootCheckbox">Ja indhold af denne type er tilladt i roden</key>
<key alias="childNodesHeading">Tilladte typer</key> <key alias="childNodesHeading">Tilladte typer</key>
<key alias="childNodesDescription">Tillad at oprette indhold af en specifik type under denne</key> <key alias="childNodesDescription">Tillad at oprette indhold af en specifik type under denne</key>
<key alias="chooseChildNode">Vælg child node</key> <key alias="chooseChildNode">Vælg child node</key>
<key alias="compositionsDescription">Nedarv faner og egenskaber fra en anden dokumenttype. Nye faner vil blive tilføjet den nuværende dokumenttype eller sammenflettet hvis fanenavnene er ens.</key> <key alias="compositionsDescription">Nedarv faner og egenskaber fra en anden dokumenttype. Nye faner vil blive tilføjet den nuværende dokumenttype eller sammenflettet hvis fanenavnene er ens.</key>
<key alias="compositionInUse">Indholdstypen bliver brugt i en komposition og kan derfor ikke blive anvendt som komposition</key> <key alias="compositionInUse">Indholdstypen bliver brugt i en komposition og kan derfor ikke blive anvendt som komposition</key>
<key alias="noAvailableCompositions">Der er ingen indholdstyper tilgængelige at bruge som komposition</key> <key alias="noAvailableCompositions">Der er ingen indholdstyper tilgængelige at bruge som komposition</key>
<key alias="availableEditors">Tilgængelige editors</key> <key alias="availableEditors">Tilgængelige editors</key>
<key alias="reuse">Genbrug</key> <key alias="reuse">Genbrug</key>
<key alias="editorSettings">Editor indstillinger</key> <key alias="editorSettings">Editor indstillinger</key>
<key alias="configuration">Konfiguration</key> <key alias="configuration">Konfiguration</key>
<key alias="yesDelete">Ja, slet</key> <key alias="yesDelete">Ja, slet</key>
<key alias="movedUnderneath">blev flyttet til</key> <key alias="movedUnderneath">blev flyttet til</key>
<key alias="folderToMove">Vælg hvor</key> <key alias="folderToMove">Vælg hvor</key>
<key alias="structureBelow">skal flyttes til</key> <key alias="structureBelow">skal flyttes til</key>
<key alias="allDocumentTypes">Alle dokumenttyper</key> <key alias="allDocumentTypes">Alle dokumenttyper</key>
<key alias="allDocuments">Alle dokumenter</key> <key alias="allDocuments">Alle dokumenter</key>
<key alias="allMediaItems">Alle medier</key> <key alias="allMediaItems">Alle medier</key>
<key alias="usingThisDocument">som benytter denne dokumenttype vil blive slettet permanent. Bekræft at du også vil slette dem.</key> <key alias="usingThisDocument">som benytter denne dokumenttype vil blive slettet permanent. Bekræft at du også vil slette dem.</key>
<key alias="usingThisMedia">som benytter denne medietype vil blive slettet permanent. Bekræft at du også vil slette dem.</key> <key alias="usingThisMedia">som benytter denne medietype vil blive slettet permanent. Bekræft at du også vil slette dem.</key>
<key alias="usingThisMember">som benytter denne medlemstype vil blive slettet permanent. Bekræft at du også vil slette dem.</key> <key alias="usingThisMember">som benytter denne medlemstype vil blive slettet permanent. Bekræft at du også vil slette dem.</key>
<key alias="andAllDocuments">og alle dokumenter, som benytter denne type</key> <key alias="andAllDocuments">og alle dokumenter, som benytter denne type</key>
<key alias="andAllMediaItems">og alle medier, som benytter denne type</key> <key alias="andAllMediaItems">og alle medier, som benytter denne type</key>
<key alias="andAllMembers">og alle medlemmer, som benytter denne type</key> <key alias="andAllMembers">og alle medlemmer, som benytter denne type</key>
<key alias="thisEditorUpdateSettings">der bruger denne editor vil blive opdateret med de nye indstillinger</key> <key alias="thisEditorUpdateSettings">der bruger denne editor vil blive opdateret med de nye indstillinger</key>
</area> </area>
<area alias="rollback"> <area alias="rollback">
@@ -914,8 +942,6 @@ Mange hilsner fra Umbraco robotten
<area alias="speechBubbles"> <area alias="speechBubbles">
<key alias="operationCancelledHeader">Annulleret</key> <key alias="operationCancelledHeader">Annulleret</key>
<key alias="operationCancelledText">Handlingen blev annulleret af et 3. part tilføjelsesprogram</key> <key alias="operationCancelledText">Handlingen blev annulleret af et 3. part tilføjelsesprogram</key>
<key alias="contentPublishedFailedByEvent">Udgivelsen blev standset af et 3. parts modul</key>
<key alias="contentPublishedFailedAwaitingRelease">Udgivelsen kunne ikke udgives da publiceringsdato er sat</key>
<key alias="contentTypeDublicatePropertyType">Property type eksisterer allerede</key> <key alias="contentTypeDublicatePropertyType">Property type eksisterer allerede</key>
<key alias="contentTypePropertyTypeCreated">Egenskabstype oprettet</key> <key alias="contentTypePropertyTypeCreated">Egenskabstype oprettet</key>
<key alias="contentTypePropertyTypeCreatedText"><![CDATA[Navn: %0% <br /> DataType: %1%]]></key> <key alias="contentTypePropertyTypeCreatedText"><![CDATA[Navn: %0% <br /> DataType: %1%]]></key>
@@ -929,7 +955,6 @@ Mange hilsner fra Umbraco robotten
<key alias="cssSavedText">Stylesheet gemt uden fejl</key> <key alias="cssSavedText">Stylesheet gemt uden fejl</key>
<key alias="dataTypeSaved">Datatype gemt</key> <key alias="dataTypeSaved">Datatype gemt</key>
<key alias="dictionaryItemSaved">Ordbogsnøgle gemt</key> <key alias="dictionaryItemSaved">Ordbogsnøgle gemt</key>
<key alias="editContentPublishedFailedByParent">Udgivelsen fejlede fordi en overordnet side ikke er publiceret</key>
<key alias="editContentPublishedHeader">Indhold publiceret</key> <key alias="editContentPublishedHeader">Indhold publiceret</key>
<key alias="editContentPublishedText">og nu synligt for besøgende</key> <key alias="editContentPublishedText">og nu synligt for besøgende</key>
<key alias="editContentSavedHeader">Indhold gemt</key> <key alias="editContentSavedHeader">Indhold gemt</key>
@@ -1131,11 +1156,28 @@ Mange hilsner fra Umbraco robotten
<key alias="sessionExpires">Session udløber</key> <key alias="sessionExpires">Session udløber</key>
</area> </area>
<area alias="validation"> <area alias="validation">
<key alias="validation">Validation</key> <key alias="validation">Validation</key>
<key alias="validateAsEmail">Valider som email</key> <key alias="validateAsEmail">Valider som email</key>
<key alias="validateAsNumber">Valider som tal</key> <key alias="validateAsNumber">Valider som tal</key>
<key alias="validateAsUrl">Valider som Url</key> <key alias="validateAsUrl">Valider som Url</key>
<key alias="enterCustomValidation">...eller indtast din egen validering</key> <key alias="enterCustomValidation">...eller indtast din egen validering</key>
<key alias="fieldIsMandatory">Feltet er påkrævet</key> <key alias="fieldIsMandatory">Feltet er påkrævet</key>
</area>
<area alias="redirectUrls">
<key alias="disableUrlTracker">Slå URL tracker fra</key>
<key alias="enableUrlTracker">Slå URL tracker til</key>
<key alias="originalUrl">Original URL</key>
<key alias="redirectedTo">Viderestillet til</key>
<key alias="noRedirects">Der er ikke lavet nogen viderestillinger</key>
<key alias="noRedirectsDescription">Når en udgivet side bliver omdøbt eller flyttet, vil en viderestilling automatisk blive lavet til den nye side.</key>
<key alias="removeButton">Fjern</key>
<key alias="confirmRemove">Er du sikker på at du vil fjerne viderestillingen fra '%0%' til '%1%'?</key>
<key alias="redirectRemoved">Viderestillings URL fjernet.</key>
<key alias="redirectRemoveError">Fejl under fjernelse af viderestillings URL.</key>
<key alias="confirmDisable">Er du sikker på at du vil slå URL trackeren fra?</key>
<key alias="disabledConfirm">URL tracker er nu slået fra.</key>
<key alias="disableError">Der opstod en fejl under forsøget på at slå URL trackeren fra, der findes mere information i logfilen.</key>
<key alias="enabledConfirm">URL tracker er nu slået fra.</key>
<key alias="enableError">Der opstod en fejl under forsøget på at slå URL trackeren til, der findes mere information i logfilen.</key>
</area> </area>
</language> </language>
+19 -20
View File
@@ -28,6 +28,9 @@
<key alias="refreshNode">Reload</key> <key alias="refreshNode">Reload</key>
<key alias="republish">Republish entire site</key> <key alias="republish">Republish entire site</key>
<key alias="restore" version="7.3.0">Restore</key> <key alias="restore" version="7.3.0">Restore</key>
<key alias="SetPermissionsForThePage">Set permissions for the page %0%</key>
<key alias="chooseWhereToMove">Choose where to move</key>
<key alias="toInTheTreeStructureBelow">to in the tree structure below</key>
<key alias="rights">Permissions</key> <key alias="rights">Permissions</key>
<key alias="rollback">Rollback</key> <key alias="rollback">Rollback</key>
<key alias="sendtopublish">Send To Publish</key> <key alias="sendtopublish">Send To Publish</key>
@@ -144,12 +147,12 @@
<key alias="memberrole">Role</key> <key alias="memberrole">Role</key>
<key alias="membertype">Member Type</key> <key alias="membertype">Member Type</key>
<key alias="noDate">No date chosen</key> <key alias="noDate">No date chosen</key>
<key alias="nodeName">Page Title</key> <key alias="nodeName">Link title</key>
<key alias="otherElements">Properties</key> <key alias="otherElements">Properties</key>
<key alias="parentNotPublished">This document is published but is not visible because the parent '%0%' is unpublished</key> <key alias="parentNotPublished">This document is published but is not visible because the parent '%0%' is unpublished</key>
<key alias="parentNotPublishedAnomaly">Oops: this document is published but is not in the cache (internal error - see log)</key> <key alias="parentNotPublishedAnomaly">This document is published but is not in the cache</key>
<key alias="getUrlException">Oops: could not get the url (internal error - see log)</key> <key alias="getUrlException">Could not get the url</key>
<key alias="routeError">Oops: this document is published but its url would collide with content %0%</key> <key alias="routeError">This document is published but its url would collide with content %0%</key>
<key alias="publish">Publish</key> <key alias="publish">Publish</key>
<key alias="publishStatus">Publication Status</key> <key alias="publishStatus">Publication Status</key>
<key alias="releaseDate">Publish at</key> <key alias="releaseDate">Publish at</key>
@@ -286,18 +289,12 @@
<key alias="treepicker">Pick item</key> <key alias="treepicker">Pick item</key>
<key alias="viewCacheItem">View Cache Item</key> <key alias="viewCacheItem">View Cache Item</key>
<key alias="createFolder">Create folder...</key> <key alias="createFolder">Create folder...</key>
<key alias="relateToOriginalLabel">Relate to original</key> <key alias="relateToOriginalLabel">Relate to original</key>
<key alias="includeDescendants">Include descendants</key>
<key alias="theFriendliestCommunity">The friendliest community</key> <key alias="theFriendliestCommunity">The friendliest community</key>
<key alias="linkToPage">Link to page</key> <key alias="linkToPage">Link to page</key>
<key alias="openInNewWindow">Opens the linked document in a new window or tab</key> <key alias="openInNewWindow">Opens the linked document in a new window or tab</key>
<key alias="openInFullBody">Opens the linked document in the full body of the window</key>
<key alias="openInParentFrame">Opens the linked document in the parent frame</key>
<key alias="linkToMedia">Link to media</key> <key alias="linkToMedia">Link to media</key>
<key alias="selectMedia">Select media</key> <key alias="selectMedia">Select media</key>
<key alias="selectIcon">Select icon</key> <key alias="selectIcon">Select icon</key>
<key alias="selectItem">Select item</key> <key alias="selectItem">Select item</key>
@@ -307,19 +304,14 @@
<key alias="selectMember">Select member</key> <key alias="selectMember">Select member</key>
<key alias="selectMemberGroup">Select member group</key> <key alias="selectMemberGroup">Select member group</key>
<key alias="noIconsFound">No icons were found</key> <key alias="noIconsFound">No icons were found</key>
<key alias="noMacroParams">There are no parameters for this macro</key> <key alias="noMacroParams">There are no parameters for this macro</key>
<key alias="externalLoginProviders">External login providers</key> <key alias="externalLoginProviders">External login providers</key>
<key alias="exceptionDetail">Exception Details</key> <key alias="exceptionDetail">Exception Details</key>
<key alias="stacktrace">Stacktrace</key> <key alias="stacktrace">Stacktrace</key>
<key alias="innerException">Inner Exception</key> <key alias="innerException">Inner Exception</key>
<key alias="linkYour">Link your</key> <key alias="linkYour">Link your</key>
<key alias="unLinkYour">Un-Link your</key> <key alias="unLinkYour">Un-Link your</key>
<key alias="account">account</key> <key alias="account">account</key>
<key alias="selectEditor">Select editor</key> <key alias="selectEditor">Select editor</key>
</area> </area>
<area alias="dictionaryItem"> <area alias="dictionaryItem">
@@ -327,6 +319,12 @@
Edit the different language versions for the dictionary item '<em>%0%</em>' below<br/>You can add additional languages under the 'languages' in the menu on the left Edit the different language versions for the dictionary item '<em>%0%</em>' below<br/>You can add additional languages under the 'languages' in the menu on the left
]]></key> ]]></key>
<key alias="displayName">Culture Name</key> <key alias="displayName">Culture Name</key>
<key alias="changeKey">Edit the key of the dictionary item.</key>
<key alias="changeKeyError">
<![CDATA[
The key '%0%' already exists.
]]>
</key>
</area> </area>
<area alias="placeholders"> <area alias="placeholders">
<key alias="username">Enter your username</key> <key alias="username">Enter your username</key>
@@ -819,7 +817,7 @@ To manage your website, simply open the Umbraco back office and start adding con
<key alias="installStateInstalling">Installing...</key> <key alias="installStateInstalling">Installing...</key>
<key alias="installStateRestarting">Restarting, please wait...</key> <key alias="installStateRestarting">Restarting, please wait...</key>
<key alias="installStateComplete">All done, your browser will now refresh, please wait...</key> <key alias="installStateComplete">All done, your browser will now refresh, please wait...</key>
<key alias="installStateCompleted">Please click finish to complete installation and reload page.</key>
</area> </area>
<area alias="paste"> <area alias="paste">
<key alias="doNothing">Paste with full formatting (Not recommended)</key> <key alias="doNothing">Paste with full formatting (Not recommended)</key>
@@ -1335,7 +1333,7 @@ To manage your website, simply open the Umbraco back office and start adding con
<key alias="customErrorsCheckRectifySuccessMessage">Custom errors successfully set to '%0%'.</key> <key alias="customErrorsCheckRectifySuccessMessage">Custom errors successfully set to '%0%'.</key>
<key alias="macroErrorModeCheckSuccessMessage">MacroErrors are set to '%0%'.</key> <key alias="macroErrorModeCheckSuccessMessage">MacroErrors are set to '%0%'.</key>
<key alias="macroErrorModeCheckErrorMessage">MacroErrors are set to '%0%' which will prevent some or all pages in your site from loading completely when there's any errors in macros. Rectifying this will set the value to '%1%'.</key> <key alias="macroErrorModeCheckErrorMessage">MacroErrors are set to '%0%' which will prevent some or all pages in your site from loading completely if there are any errors in macros. Rectifying this will set the value to '%1%'.</key>
<key alias="macroErrorModeCheckRectifySuccessMessage">MacroErrors are now set to '%0%'.</key> <key alias="macroErrorModeCheckRectifySuccessMessage">MacroErrors are now set to '%0%'.</key>
<!-- The following keys get these tokens passed in: <!-- The following keys get these tokens passed in:
@@ -1353,9 +1351,10 @@ To manage your website, simply open the Umbraco back office and start adding con
<key alias="configurationServiceError">There was an error, check log for full error: %0%.</key> <key alias="configurationServiceError">There was an error, check log for full error: %0%.</key>
<key alias="xmlDataIntegrityCheckMembers">Members - Total XML: %0%, Total: %1%, Total invalid: %2%</key> <key alias="xmlDataIntegrityCheckMembers">Members - Total XML: %0%, Total: %1%, Total invalid: %2%</key>
<key alias="xmlDataIntegrityCheckMedia">Media - Total XML: %0%, Total: %1%, Total invalid %2%</key> <key alias="xmlDataIntegrityCheckMedia">Media - Total XML: %0%, Total: %1%, Total invalid: %2%</key>
<key alias="xmlDataIntegrityCheckContent">Content - Total XML: %0%, Total published: %1%, Total invalid %2%</key> <key alias="xmlDataIntegrityCheckContent">Content - Total XML: %0%, Total published: %1%, Total invalid: %2%</key>
<key alias="httpsCheckValidCertificate">Your site certificate was marked as valid.</key>
<key alias="httpsCheckInvalidCertificate">Certificate validation error: '%0%'</key> <key alias="httpsCheckInvalidCertificate">Certificate validation error: '%0%'</key>
<key alias="httpsCheckInvalidUrl">Error pinging the URL %0% - '%1%'</key> <key alias="httpsCheckInvalidUrl">Error pinging the URL %0% - '%1%'</key>
<key alias="httpsCheckIsCurrentSchemeHttps">You are currently %0% viewing the site using the HTTPS scheme.</key> <key alias="httpsCheckIsCurrentSchemeHttps">You are currently %0% viewing the site using the HTTPS scheme.</key>
+18 -17
View File
@@ -27,6 +27,9 @@
<key alias="unpublish">Unpublish</key> <key alias="unpublish">Unpublish</key>
<key alias="refreshNode">Reload</key> <key alias="refreshNode">Reload</key>
<key alias="republish">Republish entire site</key> <key alias="republish">Republish entire site</key>
<key alias="SetPermissionsForThePage">Set permissions for the page %0%</key>
<key alias="chooseWhereToMove">Choose where to move</key>
<key alias="toInTheTreeStructureBelow">to in the tree structure below</key>
<key alias="restore" version="7.3.0">Restore</key> <key alias="restore" version="7.3.0">Restore</key>
<key alias="rights">Permissions</key> <key alias="rights">Permissions</key>
<key alias="rollback">Rollback</key> <key alias="rollback">Rollback</key>
@@ -145,12 +148,12 @@
<key alias="memberrole">Role</key> <key alias="memberrole">Role</key>
<key alias="membertype">Member Type</key> <key alias="membertype">Member Type</key>
<key alias="noDate">No date chosen</key> <key alias="noDate">No date chosen</key>
<key alias="nodeName">Page Title</key> <key alias="nodeName">Link title</key>
<key alias="otherElements">Properties</key> <key alias="otherElements">Properties</key>
<key alias="parentNotPublished">This document is published but is not visible because the parent '%0%' is unpublished</key> <key alias="parentNotPublished">This document is published but is not visible because the parent '%0%' is unpublished</key>
<key alias="parentNotPublishedAnomaly">Oops: this document is published but is not in the cache (internal error - see log)</key> <key alias="parentNotPublishedAnomaly">This document is published but is not in the cache</key>
<key alias="getUrlException">Oops: could not get the url (internal error - see log)</key> <key alias="getUrlException">Could not get the url</key>
<key alias="routeError">Oops: this document is published but its url would collide with content %0%</key> <key alias="routeError">This document is published but its url would collide with content %0%</key>
<key alias="publish">Publish</key> <key alias="publish">Publish</key>
<key alias="publishStatus">Publication Status</key> <key alias="publishStatus">Publication Status</key>
<key alias="releaseDate">Publish at</key> <key alias="releaseDate">Publish at</key>
@@ -288,18 +291,12 @@
<key alias="treepicker">Pick item</key> <key alias="treepicker">Pick item</key>
<key alias="viewCacheItem">View Cache Item</key> <key alias="viewCacheItem">View Cache Item</key>
<key alias="createFolder">Create folder...</key> <key alias="createFolder">Create folder...</key>
<key alias="relateToOriginalLabel">Relate to original</key> <key alias="relateToOriginalLabel">Relate to original</key>
<key alias="includeDescendants">Include descendants</key>
<key alias="theFriendliestCommunity">The friendliest community</key> <key alias="theFriendliestCommunity">The friendliest community</key>
<key alias="linkToPage">Link to page</key> <key alias="linkToPage">Link to page</key>
<key alias="openInNewWindow">Opens the linked document in a new window or tab</key> <key alias="openInNewWindow">Opens the linked document in a new window or tab</key>
<key alias="openInFullBody">Opens the linked document in the full body of the window</key>
<key alias="openInParentFrame">Opens the linked document in the parent frame</key>
<key alias="linkToMedia">Link to media</key> <key alias="linkToMedia">Link to media</key>
<key alias="selectMedia">Select media</key> <key alias="selectMedia">Select media</key>
<key alias="selectIcon">Select icon</key> <key alias="selectIcon">Select icon</key>
<key alias="selectItem">Select item</key> <key alias="selectItem">Select item</key>
@@ -308,19 +305,14 @@
<key alias="selectContent">Select content</key> <key alias="selectContent">Select content</key>
<key alias="selectMember">Select member</key> <key alias="selectMember">Select member</key>
<key alias="selectMemberGroup">Select member group</key> <key alias="selectMemberGroup">Select member group</key>
<key alias="noMacroParams">There are no parameters for this macro</key> <key alias="noMacroParams">There are no parameters for this macro</key>
<key alias="externalLoginProviders">External login providers</key> <key alias="externalLoginProviders">External login providers</key>
<key alias="exceptionDetail">Exception Details</key> <key alias="exceptionDetail">Exception Details</key>
<key alias="stacktrace">Stacktrace</key> <key alias="stacktrace">Stacktrace</key>
<key alias="innerException">Inner Exception</key> <key alias="innerException">Inner Exception</key>
<key alias="linkYour">Link your</key> <key alias="linkYour">Link your</key>
<key alias="unLinkYour">Un-Link your</key> <key alias="unLinkYour">Un-Link your</key>
<key alias="account">account</key> <key alias="account">account</key>
<key alias="selectEditor">Select editor</key> <key alias="selectEditor">Select editor</key>
</area> </area>
<area alias="dictionaryItem"> <area alias="dictionaryItem">
@@ -328,6 +320,12 @@
Edit the different language versions for the dictionary item '<em>%0%</em>' below<br/>You can add additional languages under the 'languages' in the menu on the left Edit the different language versions for the dictionary item '<em>%0%</em>' below<br/>You can add additional languages under the 'languages' in the menu on the left
]]></key> ]]></key>
<key alias="displayName">Culture Name</key> <key alias="displayName">Culture Name</key>
<key alias="changeKey">Edit the key of the dictionary item.</key>
<key alias="changeKeyError">
<![CDATA[
The key '%0%' already exists.
]]>
</key>
</area> </area>
<area alias="placeholders"> <area alias="placeholders">
<key alias="username">Enter your username</key> <key alias="username">Enter your username</key>
@@ -460,6 +458,7 @@
<key alias="install">Install</key> <key alias="install">Install</key>
<key alias="invalid">Invalid</key> <key alias="invalid">Invalid</key>
<key alias="justify">Justify</key> <key alias="justify">Justify</key>
<key alias="label">Label</key>
<key alias="language">Language</key> <key alias="language">Language</key>
<key alias="layout">Layout</key> <key alias="layout">Layout</key>
<key alias="loading">Loading</key> <key alias="loading">Loading</key>
@@ -818,6 +817,7 @@ To manage your website, simply open the Umbraco back office and start adding con
<key alias="installStateInstalling">Installing...</key> <key alias="installStateInstalling">Installing...</key>
<key alias="installStateRestarting">Restarting, please wait...</key> <key alias="installStateRestarting">Restarting, please wait...</key>
<key alias="installStateComplete">All done, your browser will now refresh, please wait...</key> <key alias="installStateComplete">All done, your browser will now refresh, please wait...</key>
<key alias="installStateCompleted">Please click finish to complete installation and reload page.</key>
</area> </area>
<area alias="paste"> <area alias="paste">
<key alias="doNothing">Paste with full formatting (Not recommended)</key> <key alias="doNothing">Paste with full formatting (Not recommended)</key>
@@ -1339,7 +1339,7 @@ To manage your website, simply open the Umbraco back office and start adding con
<key alias="customErrorsCheckRectifySuccessMessage">Custom errors successfully set to '%0%'.</key> <key alias="customErrorsCheckRectifySuccessMessage">Custom errors successfully set to '%0%'.</key>
<key alias="macroErrorModeCheckSuccessMessage">MacroErrors are set to '%0%'.</key> <key alias="macroErrorModeCheckSuccessMessage">MacroErrors are set to '%0%'.</key>
<key alias="macroErrorModeCheckErrorMessage">MacroErrors are set to '%0%' which will prevent some or all pages in your site from loading completely when there's any errors in macros. Rectifying this will set the value to '%1%'.</key> <key alias="macroErrorModeCheckErrorMessage">MacroErrors are set to '%0%' which will prevent some or all pages in your site from loading completely if there are any errors in macros. Rectifying this will set the value to '%1%'.</key>
<key alias="macroErrorModeCheckRectifySuccessMessage">MacroErrors are now set to '%0%'.</key> <key alias="macroErrorModeCheckRectifySuccessMessage">MacroErrors are now set to '%0%'.</key>
<!-- The following keys get these tokens passed in: <!-- The following keys get these tokens passed in:
@@ -1360,6 +1360,7 @@ To manage your website, simply open the Umbraco back office and start adding con
<key alias="xmlDataIntegrityCheckMedia">Media - Total XML: %0%, Total: %1%, Total invalid: %2%</key> <key alias="xmlDataIntegrityCheckMedia">Media - Total XML: %0%, Total: %1%, Total invalid: %2%</key>
<key alias="xmlDataIntegrityCheckContent">Content - Total XML: %0%, Total published: %1%, Total invalid: %2%</key> <key alias="xmlDataIntegrityCheckContent">Content - Total XML: %0%, Total published: %1%, Total invalid: %2%</key>
<key alias="httpsCheckValidCertificate">Your site certificate was marked as valid.</key>
<key alias="httpsCheckInvalidCertificate">Certificate validation error: '%0%'</key> <key alias="httpsCheckInvalidCertificate">Certificate validation error: '%0%'</key>
<key alias="httpsCheckInvalidUrl">Error pinging the URL %0% - '%1%'</key> <key alias="httpsCheckInvalidUrl">Error pinging the URL %0% - '%1%'</key>
<key alias="httpsCheckIsCurrentSchemeHttps">You are currently %0% viewing the site using the HTTPS scheme.</key> <key alias="httpsCheckIsCurrentSchemeHttps">You are currently %0% viewing the site using the HTTPS scheme.</key>
File diff suppressed because it is too large Load Diff
+1 -13
View File
@@ -275,19 +275,12 @@
<key alias="thumbnailimageclickfororiginal">クリックすると画像がフルサイズで表示されます</key> <key alias="thumbnailimageclickfororiginal">クリックすると画像がフルサイズで表示されます</key>
<key alias="treepicker">項目の選択</key> <key alias="treepicker">項目の選択</key>
<key alias="viewCacheItem">キャッシュされている項目の表示</key> <key alias="viewCacheItem">キャッシュされている項目の表示</key>
<key alias="createFolder">フォルダーの作成...</key> <key alias="createFolder">フォルダーの作成...</key>
<key alias="relateToOriginalLabel">オリジナルに関連付ける</key> <key alias="relateToOriginalLabel">オリジナルに関連付ける</key>
<key alias="theFriendliestCommunity">フレンドリーなコミュニティ</key> <key alias="theFriendliestCommunity">フレンドリーなコミュニティ</key>
<key alias="linkToPage">ページへリンク</key> <key alias="linkToPage">ページへリンク</key>
<key alias="openInNewWindow">リンク ドキュメントを新しいウィンドウまたはタブで開く</key> <key alias="openInNewWindow">リンク ドキュメントを新しいウィンドウまたはタブで開く</key>
<key alias="openInFullBody">リンク ドキュメントをウィンドウ全文表示で開く</key>
<key alias="openInParentFrame">親フレームでリンク ドキュメントを開く</key>
<key alias="linkToMedia">メディアへリンク</key> <key alias="linkToMedia">メディアへリンク</key>
<key alias="selectMedia">メディアの選択</key> <key alias="selectMedia">メディアの選択</key>
<key alias="selectIcon">アイコンの選択</key> <key alias="selectIcon">アイコンの選択</key>
<key alias="selectItem">アイテムの選択</key> <key alias="selectItem">アイテムの選択</key>
@@ -296,19 +289,14 @@
<key alias="selectContent">コンテンツの選択</key> <key alias="selectContent">コンテンツの選択</key>
<key alias="selectMember">メンバーの選択</key> <key alias="selectMember">メンバーの選択</key>
<key alias="selectMemberGroup">メンバー グループの選択</key> <key alias="selectMemberGroup">メンバー グループの選択</key>
<key alias="noMacroParams">このマクロのパラメーターはありません</key> <key alias="noMacroParams">このマクロのパラメーターはありません</key>
<key alias="externalLoginProviders">外部ログイン プロバイダー</key> <key alias="externalLoginProviders">外部ログイン プロバイダー</key>
<key alias="exceptionDetail">例外の詳細</key> <key alias="exceptionDetail">例外の詳細</key>
<key alias="stacktrace">スタックトレース</key> <key alias="stacktrace">スタックトレース</key>
<key alias="innerException">Inner Exception</key> <key alias="innerException">Inner Exception</key>
<key alias="linkYour">次をリンク:</key> <key alias="linkYour">次をリンク:</key>
<key alias="unLinkYour">次をリンク解除:</key> <key alias="unLinkYour">次をリンク解除:</key>
<key alias="account">アカウント</key> <key alias="account">アカウント</key>
<key alias="selectEditor">エディターの選択</key> <key alias="selectEditor">エディターの選択</key>
</area> </area>
<area alias="dictionaryItem"> <area alias="dictionaryItem">
+18 -18
View File
@@ -15,8 +15,8 @@
<key alias="disable">Deaktywuj</key> <key alias="disable">Deaktywuj</key>
<key alias="emptyTrashcan">Opróżnij kosz</key> <key alias="emptyTrashcan">Opróżnij kosz</key>
<key alias="exportDocumentType">Eksportuj typ dokumentu</key> <key alias="exportDocumentType">Eksportuj typ dokumentu</key>
<key alias="exportDocumentTypeAsCode">TRANSLATE ME: 'Export to .NET'</key> <key alias="exportDocumentTypeAsCode">Ekspo .NET'</key>
<key alias="exportDocumentTypeAsCode-Full">TRANSLATE ME: 'Export to .NET'</key> <key alias="exportDocumentTypeAsCode-Full">Eksportuj do .NET'</key>
<key alias="importDocumentType">Importuj typ dokumentu</key> <key alias="importDocumentType">Importuj typ dokumentu</key>
<key alias="importPackage">Importuj zbiór</key> <key alias="importPackage">Importuj zbiór</key>
<key alias="liveEdit">Edytuj na stronie</key> <key alias="liveEdit">Edytuj na stronie</key>
@@ -118,7 +118,7 @@
</area> </area>
<area alias="dashboard"> <area alias="dashboard">
<key alias="browser">Przeglądaj swoją stronę</key> <key alias="browser">Przeglądaj swoją stronę</key>
<key alias="dontShowAgain">TRANSLATE ME: '- Hide'</key> <key alias="dontShowAgain">- Ukryj</key>
<key alias="nothinghappens">Jeśli Umbraco się nie otwiera, prawdopodbnie musisz zezwolić tej stronie na otwieranie wyskakujących okienek</key> <key alias="nothinghappens">Jeśli Umbraco się nie otwiera, prawdopodbnie musisz zezwolić tej stronie na otwieranie wyskakujących okienek</key>
<key alias="openinnew">zostało otwarte w nowym oknie</key> <key alias="openinnew">zostało otwarte w nowym oknie</key>
<key alias="restart">Restartuj</key> <key alias="restart">Restartuj</key>
@@ -168,7 +168,7 @@
<key alias="confirmEmptyTrashcan">Proszę zaznaczyć, aby potwierdzić usunięcie %0% elementów.</key> <key alias="confirmEmptyTrashcan">Proszę zaznaczyć, aby potwierdzić usunięcie %0% elementów.</key>
<key alias="confirmlogout">Jesteś pewny?</key> <key alias="confirmlogout">Jesteś pewny?</key>
<key alias="confirmSure">Jesteś pewny?</key> <key alias="confirmSure">Jesteś pewny?</key>
<key alias="cut">TRANSLATE ME: 'Cut'</key> <key alias="cut">Wytnij</key>
<key alias="editdictionary">Edytuj element słownika</key> <key alias="editdictionary">Edytuj element słownika</key>
<key alias="editlanguage">Edytuj język</key> <key alias="editlanguage">Edytuj język</key>
<key alias="insertAnchor">Wstaw link wewnętrzny</key> <key alias="insertAnchor">Wstaw link wewnętrzny</key>
@@ -183,7 +183,7 @@
<key alias="linkinternal">Link wewnętrzny:</key> <key alias="linkinternal">Link wewnętrzny:</key>
<key alias="linklocaltip">Kiedy używasz odnośników lokalnych, wstaw znak "#" na początku linku</key> <key alias="linklocaltip">Kiedy używasz odnośników lokalnych, wstaw znak "#" na początku linku</key>
<key alias="linknewwindow">Otworzyć w nowym oknie?</key> <key alias="linknewwindow">Otworzyć w nowym oknie?</key>
<key alias="macroContainerSettings">TRANSLATE ME: 'Macro Settings'</key> <key alias="macroContainerSettings">Ustawienia Makra</key>
<key alias="macroDoesNotHaveProperties">To makro nie posiada żadnych właściwości, które można edytować</key> <key alias="macroDoesNotHaveProperties">To makro nie posiada żadnych właściwości, które można edytować</key>
<key alias="paste">Wklej</key> <key alias="paste">Wklej</key>
<key alias="permissionsEdit">Edytuj Uprawnienia dla</key> <key alias="permissionsEdit">Edytuj Uprawnienia dla</key>
@@ -192,7 +192,7 @@
<key alias="recycleBinWarning">Usunięcie elementów z kosza powoduje ich trwałe i nieodwracalne skasowanie</key> <key alias="recycleBinWarning">Usunięcie elementów z kosza powoduje ich trwałe i nieodwracalne skasowanie</key>
<key alias="regexSearchError"><![CDATA[Serwis <a target='_blank' href='http://regexlib.com'>regexlib.com</a> aktulanie nie jest dostępny, na co nie mamy wpływu. Bardzo przepraszamy za te utrudnienia.]]></key> <key alias="regexSearchError"><![CDATA[Serwis <a target='_blank' href='http://regexlib.com'>regexlib.com</a> aktulanie nie jest dostępny, na co nie mamy wpływu. Bardzo przepraszamy za te utrudnienia.]]></key>
<key alias="regexSearchHelp">Przeszukaj dla wyrażeń regularnych aby dodać regułę sprawdzającą do formularza. Np. 'email' 'url'</key> <key alias="regexSearchHelp">Przeszukaj dla wyrażeń regularnych aby dodać regułę sprawdzającą do formularza. Np. 'email' 'url'</key>
<key alias="removeMacro">TRANSLATE ME: 'Remove Macro'</key> <key alias="removeMacro">Usuń Makro</key>
<key alias="requiredField">Pole wymagane</key> <key alias="requiredField">Pole wymagane</key>
<key alias="sitereindexed">Strona została przeindeksowana</key> <key alias="sitereindexed">Strona została przeindeksowana</key>
<key alias="siterepublished">Cache strony zostało odświeżone. Cała opublikowana zawartość jest teraz aktualna. Natomiast cała nieopublikowana zawartość ciągle nie jest widoczna</key> <key alias="siterepublished">Cache strony zostało odświeżone. Cała opublikowana zawartość jest teraz aktualna. Natomiast cała nieopublikowana zawartość ciągle nie jest widoczna</key>
@@ -222,7 +222,7 @@ Możesz dodać dodatkowe języki w menu "Języki" po lewej stronie.]]></key>
<area alias="editdatatype"> <area alias="editdatatype">
<key alias="addPrevalue">Dodaj wartość</key> <key alias="addPrevalue">Dodaj wartość</key>
<key alias="dataBaseDatatype">Typ bazydanych</key> <key alias="dataBaseDatatype">Typ bazydanych</key>
<key alias="guid">TRANSLATE ME: 'Data Editor GUID'</key> <key alias="guid">Edytor GUID</key>
<key alias="renderControl">Renderuj kontrolkę</key> <key alias="renderControl">Renderuj kontrolkę</key>
<key alias="rteButtons">Przyciski</key> <key alias="rteButtons">Przyciski</key>
<key alias="rteEnableAdvancedSettings">Włącz ustawienia zaawansowane dla</key> <key alias="rteEnableAdvancedSettings">Włącz ustawienia zaawansowane dla</key>
@@ -235,7 +235,7 @@ Możesz dodać dodatkowe języki w menu "Języki" po lewej stronie.]]></key>
<area alias="errorHandling"> <area alias="errorHandling">
<key alias="errorButDataWasSaved">Dane zostały zapisane, lecz wystąpiły błędy które musisz poprawić przed publikacją strony:</key> <key alias="errorButDataWasSaved">Dane zostały zapisane, lecz wystąpiły błędy które musisz poprawić przed publikacją strony:</key>
<key alias="errorChangingProviderPassword">Bieżący dostawca Membership nie obsługuje zmiany hasła (EnablePasswordRetrieval musi mieć wartość true)</key> <key alias="errorChangingProviderPassword">Bieżący dostawca Membership nie obsługuje zmiany hasła (EnablePasswordRetrieval musi mieć wartość true)</key>
<key alias="errorExistsWithoutTab">TRANSLATE ME: '%0% already exists'</key> <key alias="errorExistsWithoutTab">%0% już istnieje</key>
<key alias="errorHeader">Wystąpiły błędy:</key> <key alias="errorHeader">Wystąpiły błędy:</key>
<key alias="errorHeaderWithoutTab">Wystąpiły błędy:</key> <key alias="errorHeaderWithoutTab">Wystąpiły błędy:</key>
<key alias="errorInPasswordFormat">Hasło powinno mieć minimum %0% znaków, i zawierać co najmniej %1% niealfanumeryczny znak</key> <key alias="errorInPasswordFormat">Hasło powinno mieć minimum %0% znaków, i zawierać co najmniej %1% niealfanumeryczny znak</key>
@@ -308,7 +308,7 @@ Możesz dodać dodatkowe języki w menu "Języki" po lewej stronie.]]></key>
<key alias="language">Język</key> <key alias="language">Język</key>
<key alias="layout">układ</key> <key alias="layout">układ</key>
<key alias="loading">Ładowanie</key> <key alias="loading">Ładowanie</key>
<key alias="locked">TRANSLATE ME: 'Locked'</key> <key alias="locked">Zablokowany</key>
<key alias="login">Zaloguj</key> <key alias="login">Zaloguj</key>
<key alias="logoff">Wyloguj</key> <key alias="logoff">Wyloguj</key>
<key alias="logout">Wyloguj</key> <key alias="logout">Wyloguj</key>
@@ -332,7 +332,7 @@ Możesz dodać dodatkowe języki w menu "Języki" po lewej stronie.]]></key>
<key alias="recycleBin">Kosz</key> <key alias="recycleBin">Kosz</key>
<key alias="remaining">Pozostało</key> <key alias="remaining">Pozostało</key>
<key alias="rename">Zmień nazwę</key> <key alias="rename">Zmień nazwę</key>
<key alias="renew">TRANSLATE ME: 'Renew'</key> <key alias="renew">Odnów</key>
<key alias="retry">Ponów próbę</key> <key alias="retry">Ponów próbę</key>
<key alias="rights">Uprawnienia</key> <key alias="rights">Uprawnienia</key>
<key alias="search">Szukaj</key> <key alias="search">Szukaj</key>
@@ -341,7 +341,7 @@ Możesz dodać dodatkowe języki w menu "Języki" po lewej stronie.]]></key>
<key alias="showPageOnSend">Pokaż stronę "wyślij"</key> <key alias="showPageOnSend">Pokaż stronę "wyślij"</key>
<key alias="size">Rozmiar</key> <key alias="size">Rozmiar</key>
<key alias="sort">Sortuj</key> <key alias="sort">Sortuj</key>
<key alias="submit">Submit</key> <!-- TODO: Translate this --> <key alias="submit">Zatwierdź</key>
<key alias="type">Typ</key> <key alias="type">Typ</key>
<key alias="typeToSearch">Szukaj</key> <key alias="typeToSearch">Szukaj</key>
<key alias="up">W górę</key> <key alias="up">W górę</key>
@@ -356,8 +356,8 @@ Możesz dodać dodatkowe języki w menu "Języki" po lewej stronie.]]></key>
<key alias="welcome">Witaj...</key> <key alias="welcome">Witaj...</key>
<key alias="width">Szerokość</key> <key alias="width">Szerokość</key>
<key alias="yes">Tak</key> <key alias="yes">Tak</key>
<key alias="reorder">Reorder</key> <key alias="reorder">Zmień kolejność</key>
<key alias="reorderDone">I am done reordering</key> <key alias="reorderDone">Kolejność została zmieniona</key>
</area> </area>
<area alias="graphicheadline"> <area alias="graphicheadline">
<key alias="backgroundcolor">Kolor tła</key> <key alias="backgroundcolor">Kolor tła</key>
@@ -786,7 +786,7 @@ Miłego dnia!]]></key>
<area alias="user"> <area alias="user">
<key alias="administrators">Administrator</key> <key alias="administrators">Administrator</key>
<key alias="categoryField">Pole kategorii</key> <key alias="categoryField">Pole kategorii</key>
<key alias="changePassword">TRANSLATE ME: 'Change Your Password'</key> <key alias="changePassword">Zmień hasło!</key>
<key alias="changePasswordDescription">TRANSLATE ME: 'You can change your password for accessing the Umbraco Back Office by filling out the form below and click the 'Change Password' button'</key> <key alias="changePasswordDescription">TRANSLATE ME: 'You can change your password for accessing the Umbraco Back Office by filling out the form below and click the 'Change Password' button'</key>
<key alias="contentChannel">Zawartość</key> <key alias="contentChannel">Zawartość</key>
<key alias="descriptionField">Opis</key> <key alias="descriptionField">Opis</key>
@@ -800,10 +800,10 @@ Miłego dnia!]]></key>
<key alias="modules">Sekcje</key> <key alias="modules">Sekcje</key>
<key alias="noConsole">Wyłącz dostęp do Umbraco</key> <key alias="noConsole">Wyłącz dostęp do Umbraco</key>
<key alias="password">Hasło</key> <key alias="password">Hasło</key>
<key alias="passwordChanged">TRANSLATE ME: 'Your password has been changed!'</key> <key alias="passwordChanged">Twoje hasło zostało zmienione!</key>
<key alias="passwordConfirm">TRANSLATE ME: 'Please confirm the new password'</key> <key alias="passwordConfirm">Proszę potwierdź nowe hasło!</key>
<key alias="passwordEnterNew">TRANSLATE ME: 'Enter your new password'</key> <key alias="passwordEnterNew">Wprowadź nowe hasło</key>
<key alias="passwordIsBlank">TRANSLATE ME: 'Your new password cannot be blank!'</key> <key alias="passwordIsBlank">Nowe hasło nie może byc puste!</key>
<key alias="passwordIsDifferent">TRANSLATE ME: 'There was a difference between the new password and the confirmed password. Please try again!'</key> <key alias="passwordIsDifferent">TRANSLATE ME: 'There was a difference between the new password and the confirmed password. Please try again!'</key>
<key alias="passwordMismatch">TRANSLATE ME: 'The confirmed password doesn't match the new password!'</key> <key alias="passwordMismatch">TRANSLATE ME: 'The confirmed password doesn't match the new password!'</key>
<key alias="permissionReplaceChildren">Zastąp prawa dostępu dla węzłów potomnych</key> <key alias="permissionReplaceChildren">Zastąp prawa dostępu dla węzłów potomnych</key>
+25 -12
View File
@@ -340,18 +340,11 @@
<key alias="treepicker">Выберите элемент</key> <key alias="treepicker">Выберите элемент</key>
<key alias="viewCacheItem">Просмотр элемента кэша</key> <key alias="viewCacheItem">Просмотр элемента кэша</key>
<key alias="createFolder">Создать папку...</key> <key alias="createFolder">Создать папку...</key>
<key alias="relateToOriginalLabel">Связать с оригиналом</key> <key alias="relateToOriginalLabel">Связать с оригиналом</key>
<key alias="theFriendliestCommunity">Самое дружелюбное сообщество</key> <key alias="theFriendliestCommunity">Самое дружелюбное сообщество</key>
<key alias="linkToPage">Ссылка на страницу</key> <key alias="linkToPage">Ссылка на страницу</key>
<key alias="openInNewWindow">Открывает документ по ссылке в новом окне или вкладке браузера</key> <key alias="openInNewWindow">Открывает документ по ссылке в новом окне или вкладке браузера</key>
<key alias="openInFullBody">Открывает документ по ссылке в полноэкранном режиме</key>
<key alias="openInParentFrame">Открывает документ по ссылке в родительском фрейме</key>
<key alias="linkToMedia">Ссылка на медиа-файл</key> <key alias="linkToMedia">Ссылка на медиа-файл</key>
<key alias="selectMedia">Выбрать медиа</key> <key alias="selectMedia">Выбрать медиа</key>
<key alias="selectIcon">Выбрать значок</key> <key alias="selectIcon">Выбрать значок</key>
<key alias="selectItem">Выбрать элемент</key> <key alias="selectItem">Выбрать элемент</key>
@@ -360,19 +353,14 @@
<key alias="selectContent">Выбрать содержимое</key> <key alias="selectContent">Выбрать содержимое</key>
<key alias="selectMember">Выбрать участника</key> <key alias="selectMember">Выбрать участника</key>
<key alias="selectMemberGroup">Выбрать группу участников</key> <key alias="selectMemberGroup">Выбрать группу участников</key>
<key alias="noMacroParams">Это макрос без параметров</key> <key alias="noMacroParams">Это макрос без параметров</key>
<key alias="externalLoginProviders">Провайдеры аутентификации</key> <key alias="externalLoginProviders">Провайдеры аутентификации</key>
<key alias="exceptionDetail">Подробное сообщение об ошибке</key> <key alias="exceptionDetail">Подробное сообщение об ошибке</key>
<key alias="stacktrace">Трассировка стека</key> <key alias="stacktrace">Трассировка стека</key>
<key alias="innerException">Внутренняя ошибка</key> <key alias="innerException">Внутренняя ошибка</key>
<key alias="linkYour">Связать</key> <key alias="linkYour">Связать</key>
<key alias="unLinkYour">Разорвать связь</key> <key alias="unLinkYour">Разорвать связь</key>
<key alias="account">учетную запись</key> <key alias="account">учетную запись</key>
<key alias="selectEditor">Выбрать редактор</key> <key alias="selectEditor">Выбрать редактор</key>
</area> </area>
<area alias="dictionaryItem"> <area alias="dictionaryItem">
@@ -380,6 +368,12 @@
Ниже Вы можете указать различные переводы данной статьи словаря '<em>%0%</em>'<br/>Добавить другие языки можно, воспользовавшись пунктом 'Языки' в меню слева Ниже Вы можете указать различные переводы данной статьи словаря '<em>%0%</em>'<br/>Добавить другие языки можно, воспользовавшись пунктом 'Языки' в меню слева
]]></key> ]]></key>
<key alias="displayName">Название языка (культуры)</key> <key alias="displayName">Название языка (культуры)</key>
<key alias="changeKey">Редактировать элемент (ключ) словаря</key>
<key alias="changeKeyError">
<![CDATA[
Ключ '%0%' уже существует в словаре.
]]>
</key>
</area> </area>
<area alias="editcontenttype"> <area alias="editcontenttype">
<key alias="allowAtRoot" version="7.2">Допустим как корневой</key> <key alias="allowAtRoot" version="7.2">Допустим как корневой</key>
@@ -499,6 +493,7 @@
<key alias="install">Установить</key> <key alias="install">Установить</key>
<key alias="invalid">Неверно</key> <key alias="invalid">Неверно</key>
<key alias="justify">Выравнивание</key> <key alias="justify">Выравнивание</key>
<key alias="label">Название</key>
<key alias="language">Язык</key> <key alias="language">Язык</key>
<key alias="layout">Макет</key> <key alias="layout">Макет</key>
<key alias="loading">Загрузка</key> <key alias="loading">Загрузка</key>
@@ -654,6 +649,7 @@
<key alias="xmlDataIntegrityCheckMedia">Медиа - всего в XML: %0%, всего: %1%Б с ошибками: %2%</key> <key alias="xmlDataIntegrityCheckMedia">Медиа - всего в XML: %0%, всего: %1%Б с ошибками: %2%</key>
<key alias="xmlDataIntegrityCheckContent">Содержимое - всего в XML: %0%, всего опубликовано: %1%, с ошибками: %2%</key> <key alias="xmlDataIntegrityCheckContent">Содержимое - всего в XML: %0%, всего опубликовано: %1%, с ошибками: %2%</key>
<key alias="httpsCheckValidCertificate">Сертификат Вашего веб-сайта отмечен как проверенный.</key>
<key alias="httpsCheckInvalidCertificate">Ошибка проверки сертификата: '%0%'</key> <key alias="httpsCheckInvalidCertificate">Ошибка проверки сертификата: '%0%'</key>
<key alias="httpsCheckInvalidUrl">Ошибка проверки адреса URL %0% - '%1%'</key> <key alias="httpsCheckInvalidUrl">Ошибка проверки адреса URL %0% - '%1%'</key>
<key alias="httpsCheckIsCurrentSchemeHttps">Сейчас Вы %0% просматриваете сайт, используя протокол HTTPS.</key> <key alias="httpsCheckIsCurrentSchemeHttps">Сейчас Вы %0% просматриваете сайт, используя протокол HTTPS.</key>
@@ -1065,6 +1061,23 @@
Чтобы опубликовать ранее неопубликованные документы среди дочерних, отметьте опцию <em>Включая неопубликованные дочерние документы</em>. Чтобы опубликовать ранее неопубликованные документы среди дочерних, отметьте опцию <em>Включая неопубликованные дочерние документы</em>.
]]></key> ]]></key>
</area> </area>
<area alias="redirectUrls">
<key alias="disableUrlTracker">Остановить отслеживание URL</key>
<key alias="enableUrlTracker">Запустить отслеживание URL</key>
<key alias="originalUrl">Первоначальный URL</key>
<key alias="redirectedTo">Перенаправлен в</key>
<key alias="noRedirects">На данный момент нет ни одного перенаправления</key>
<key alias="noRedirectsDescription">Если опубликованный документ переименовывается или меняет свое расположение в дереве, а следовательно, меняется адрес (URL), автоматически создается перенаправление на новое местоположение этого документа.</key>
<key alias="removeButton">Удалить</key>
<key alias="confirmRemove">Вы уверены, что хотите удалить перенаправление с '%0%' на '%1%'?</key>
<key alias="redirectRemoved">Перенаправление удалено.</key>
<key alias="redirectRemoveError">Ошибка удаления перенаправления.</key>
<key alias="confirmDisable">Вы уверены, что хотите остановить отслеживание URL?</key>
<key alias="disabledConfirm">Отслеживание URL в настоящий момент остановлено.</key>
<key alias="disableError">Ошибка остановки отслеживания URL, более подробные сведения находятся в системном журнале.</key>
<key alias="enabledConfirm">Отслеживание URL в настоящий момент запущено.</key>
<key alias="enableError">Ошибка запуска отслеживания URL, более подробные сведения находятся в системном журнале.</key>
</area>
<area alias="relatedlinks"> <area alias="relatedlinks">
<key alias="caption">Заголовок</key> <key alias="caption">Заголовок</key>
<key alias="captionPlaceholder">Укажите заголовок</key> <key alias="captionPlaceholder">Укажите заголовок</key>
+1 -1
View File
@@ -22,7 +22,7 @@
ControlToValidate="Email" ValidateEmptyText="false" OnServerValidate="EmailExistsCheck"></asp:CustomValidator> ControlToValidate="Email" ValidateEmptyText="false" OnServerValidate="EmailExistsCheck"></asp:CustomValidator>
<asp:CustomValidator runat="server" ID="EmailValidator" OnServerValidate="EmailValidator_OnServerValidate" <asp:CustomValidator runat="server" ID="EmailValidator" OnServerValidate="EmailValidator_OnServerValidate"
ControlToValidate="Email" ControlToValidate="Email"
ErrorMessage="Invalid email address" ErrorMessage='<%#ui.Text("errorHandling", "errorRegExpWithoutTab", "E-mail", CurrentUser) %>'
Display="None" /> Display="None" />
<br /> <br />
<asp:TextBox ID="Email" runat="server" Width="350px" CssClass="bigInput"></asp:TextBox> <asp:TextBox ID="Email" runat="server" Width="350px" CssClass="bigInput"></asp:TextBox>
@@ -108,16 +108,14 @@
</div> </div>
</asp:PlaceHolder> </asp:PlaceHolder>
<asp:PlaceHolder ID="SaveAndCancelPlaceholder" runat="server"> <div class="btn-toolbar umb-btn-toolbar">
<br /> <asp:PlaceHolder ID="SaveAndCancelPlaceholder" runat="server">
<p> <a href="#" class="btn btn-link" onclick="UmbClientMgr.closeModalWindow()"><%=umbraco.ui.Text("cancel")%></a>
<asp:PlaceHolder ID="SavePlaceholder" runat="server"> <asp:PlaceHolder ID="SavePlaceholder" runat="server">
<asp:Button ID="ValidateAndSave" runat="server" OnClick="ValidateAndSave_Click" /> <asp:Button ID="ValidateAndSave" runat="server" CssClass="btn btn-primary" Text="Create" OnClick="ValidateAndSave_Click"></asp:Button>
<em> <%= umbraco.ui.Text("or") %> </em>
</asp:PlaceHolder> </asp:PlaceHolder>
<a href="#" style="color: blue" onclick="UmbClientMgr.closeModalWindow()"><%=umbraco.ui.Text("general", "cancel", Security.CurrentUser)%></a> </asp:Placeholder>
</p> </div>
</asp:PlaceHolder>
</asp:Content> </asp:Content>
+333 -204
View File
@@ -1285,7 +1285,7 @@ angular.module("umbraco").controller("Umbraco.Dialogs.MacroPickerController", fu
//used for the media picker dialog //used for the media picker dialog
angular.module("umbraco") angular.module("umbraco")
.controller("Umbraco.Dialogs.MediaPickerController", .controller("Umbraco.Dialogs.MediaPickerController",
function ($scope, mediaResource, umbRequestHelper, entityResource, $log, mediaHelper, eventsService, treeService, $cookies, $element, $timeout) { function($scope, mediaResource, umbRequestHelper, entityResource, $log, mediaHelper, mediaTypeHelper, eventsService, treeService) {
var dialogOptions = $scope.dialogOptions; var dialogOptions = $scope.dialogOptions;
@@ -1295,22 +1295,27 @@ angular.module("umbraco")
$scope.startNodeId = dialogOptions.startNodeId ? dialogOptions.startNodeId : -1; $scope.startNodeId = dialogOptions.startNodeId ? dialogOptions.startNodeId : -1;
$scope.cropSize = dialogOptions.cropSize; $scope.cropSize = dialogOptions.cropSize;
//preload selected item //preload selected item
$scope.target = undefined; $scope.target = undefined;
if(dialogOptions.currentTarget){ if (dialogOptions.currentTarget) {
$scope.target = dialogOptions.currentTarget; $scope.target = dialogOptions.currentTarget;
} }
$scope.upload = function(v){ $scope.acceptedMediatypes = [];
angular.element(".umb-file-dropzone-directive .file-select").click(); mediaTypeHelper.getAllowedImagetypes($scope.startNodeId)
.then(function(types) {
$scope.acceptedMediatypes = types;
});
$scope.upload = function(v) {
angular.element(".umb-file-dropzone-directive .file-select").click();
}; };
$scope.dragLeave = function(el, event){ $scope.dragLeave = function(el, event) {
$scope.activeDrag = false; $scope.activeDrag = false;
}; };
$scope.dragEnter = function(el, event){ $scope.dragEnter = function(el, event) {
$scope.activeDrag = true; $scope.activeDrag = true;
}; };
@@ -1336,21 +1341,25 @@ angular.module("umbraco")
}; };
$scope.gotoFolder = function(folder) { $scope.gotoFolder = function(folder) {
if (!folder) {
if(!folder){ folder = { id: -1, name: "Media", icon: "icon-folder" };
folder = {id: -1, name: "Media", icon: "icon-folder"};
} }
if (folder.id > 0) { if (folder.id > 0) {
entityResource.getAncestors(folder.id, "media") entityResource.getAncestors(folder.id, "media")
.then(function(anc) { .then(function(anc) {
// anc.splice(0,1); // anc.splice(0,1);
$scope.path = _.filter(anc, function (f) { $scope.path = _.filter(anc,
return f.path.indexOf($scope.startNodeId) !== -1; function(f) {
}); return f.path.indexOf($scope.startNodeId) !== -1;
});
}); });
}
else { mediaTypeHelper.getAllowedImagetypes(folder.id)
.then(function(types) {
$scope.acceptedMediatypes = types;
});
} else {
$scope.path = []; $scope.path = [];
} }
@@ -1370,40 +1379,40 @@ angular.module("umbraco")
if (image.isFolder && !select) { if (image.isFolder && !select) {
$scope.gotoFolder(image); $scope.gotoFolder(image);
}else{ } else {
eventsService.emit("dialogs.mediaPicker.select", image); eventsService.emit("dialogs.mediaPicker.select", image);
//we have 3 options add to collection (if multi) show details, or submit it right back to the callback //we have 3 options add to collection (if multi) show details, or submit it right back to the callback
if ($scope.multiPicker) { if ($scope.multiPicker) {
$scope.select(image); $scope.select(image);
image.cssclass = ($scope.dialogData.selection.indexOf(image) > -1) ? "selected" : ""; image.cssclass = ($scope.dialogData.selection.indexOf(image) > -1) ? "selected" : "";
}else if($scope.showDetails) { } else if ($scope.showDetails) {
$scope.target= image; $scope.target = image;
$scope.target.url = mediaHelper.resolveFile(image); $scope.target.url = mediaHelper.resolveFile(image);
}else{ } else {
$scope.submit(image); $scope.submit(image);
} }
} }
}; };
$scope.exitDetails = function(){ $scope.exitDetails = function() {
if(!$scope.currentFolder){ if (!$scope.currentFolder) {
$scope.gotoFolder(); $scope.gotoFolder();
} }
$scope.target = undefined; $scope.target = undefined;
}; };
$scope.onUploadComplete = function () { $scope.onUploadComplete = function() {
$scope.gotoFolder($scope.currentFolder); $scope.gotoFolder($scope.currentFolder);
}; };
$scope.onFilesQueue = function(){ $scope.onFilesQueue = function() {
$scope.activeDrag = false; $scope.activeDrag = false;
}; };
//default root item //default root item
if(!$scope.target){ if (!$scope.target) {
$scope.gotoFolder({ id: $scope.startNodeId, name: "Media", icon: "icon-folder" }); $scope.gotoFolder({ id: $scope.startNodeId, name: "Media", icon: "icon-folder" });
} }
}); });
@@ -1895,7 +1904,7 @@ angular.module("umbraco").controller("Umbraco.Dialogs.TreePickerController",
} }
}); });
} else { } else {
var a = dialogOptions.filter.toLowerCase().split(','); var a = dialogOptions.filter.toLowerCase().replace(/\s/g, '').split(',');
angular.forEach(nodes, function (value, key) { angular.forEach(nodes, function (value, key) {
var found = a.indexOf(value.metaData.contentType.toLowerCase()) >= 0; var found = a.indexOf(value.metaData.contentType.toLowerCase()) >= 0;
@@ -3386,9 +3395,9 @@ angular.module("umbraco").controller("Umbraco.Overlays.MacroPickerController", M
//used for the media picker dialog //used for the media picker dialog
angular.module("umbraco") angular.module("umbraco")
.controller("Umbraco.Overlays.MediaPickerController", .controller("Umbraco.Overlays.MediaPickerController",
function ($scope, mediaResource, umbRequestHelper, entityResource, $log, mediaHelper, eventsService, treeService, $element, $timeout, $cookies, $cookieStore, localizationService) { function($scope, mediaResource, umbRequestHelper, entityResource, $log, mediaHelper, mediaTypeHelper, eventsService, treeService, $element, $timeout, $cookies, $cookieStore, localizationService) {
if(!$scope.model.title) { if (!$scope.model.title) {
$scope.model.title = localizationService.localize("defaultdialogs_selectMedia"); $scope.model.title = localizationService.localize("defaultdialogs_selectMedia");
} }
@@ -3401,60 +3410,59 @@ angular.module("umbraco")
$scope.startNodeId = dialogOptions.startNodeId ? dialogOptions.startNodeId : -1; $scope.startNodeId = dialogOptions.startNodeId ? dialogOptions.startNodeId : -1;
$scope.cropSize = dialogOptions.cropSize; $scope.cropSize = dialogOptions.cropSize;
$scope.lastOpenedNode = $cookieStore.get("umbLastOpenedMediaNodeId"); $scope.lastOpenedNode = $cookieStore.get("umbLastOpenedMediaNodeId");
if($scope.onlyImages){ if ($scope.onlyImages) {
$scope.acceptedFileTypes = mediaHelper.formatFileTypes(Umbraco.Sys.ServerVariables.umbracoSettings.imageFileTypes); $scope.acceptedFileTypes = mediaHelper
} .formatFileTypes(Umbraco.Sys.ServerVariables.umbracoSettings.imageFileTypes);
else { } else {
$scope.acceptedFileTypes = !mediaHelper.formatFileTypes(Umbraco.Sys.ServerVariables.umbracoSettings.disallowedUploadFiles); $scope.acceptedFileTypes = !mediaHelper
.formatFileTypes(Umbraco.Sys.ServerVariables.umbracoSettings.disallowedUploadFiles);
} }
$scope.maxFileSize = Umbraco.Sys.ServerVariables.umbracoSettings.maxFileSize + "KB"; $scope.maxFileSize = Umbraco.Sys.ServerVariables.umbracoSettings.maxFileSize + "KB";
$scope.model.selectedImages = []; $scope.model.selectedImages = [];
$scope.acceptedMediatypes = [];
mediaTypeHelper.getAllowedImagetypes($scope.startNodeId)
.then(function(types) {
$scope.acceptedMediatypes = types;
});
//preload selected item //preload selected item
$scope.target = undefined; $scope.target = undefined;
if(dialogOptions.currentTarget){ if (dialogOptions.currentTarget) {
$scope.target = dialogOptions.currentTarget; $scope.target = dialogOptions.currentTarget;
} }
$scope.upload = function(v){ $scope.upload = function(v) {
angular.element(".umb-file-dropzone-directive .file-select").click(); angular.element(".umb-file-dropzone-directive .file-select").click();
}; };
$scope.dragLeave = function(el, event){ $scope.dragLeave = function(el, event) {
$scope.activeDrag = false; $scope.activeDrag = false;
}; };
$scope.dragEnter = function(el, event){ $scope.dragEnter = function(el, event) {
$scope.activeDrag = true; $scope.activeDrag = true;
}; };
$scope.submitFolder = function() { $scope.submitFolder = function() {
if ($scope.newFolderName) {
mediaResource
.addFolder($scope.newFolderName, $scope.currentFolder.id)
.then(function(data) {
//we've added a new folder so lets clear the tree cache for that specific item
treeService.clearCache({
cacheKey: "__media", //this is the main media tree cache key
childrenOf: data.parentId //clear the children of the parent
});
if ($scope.newFolderName) { $scope.gotoFolder(data);
$scope.showFolderInput = false;
mediaResource $scope.newFolderName = "";
.addFolder($scope.newFolderName, $scope.currentFolder.id)
.then(function(data) {
//we've added a new folder so lets clear the tree cache for that specific item
treeService.clearCache({
cacheKey: "__media", //this is the main media tree cache key
childrenOf: data.parentId //clear the children of the parent
}); });
} else {
$scope.gotoFolder(data); $scope.showFolderInput = false;
}
$scope.showFolderInput = false;
$scope.newFolderName = "";
});
} else {
$scope.showFolderInput = false;
}
}; };
$scope.enterSubmitFolder = function(event) { $scope.enterSubmitFolder = function(event) {
@@ -3466,58 +3474,61 @@ angular.module("umbraco")
$scope.gotoFolder = function(folder) { $scope.gotoFolder = function(folder) {
if(!$scope.multiPicker) { if (!$scope.multiPicker) {
deselectAllImages($scope.model.selectedImages); deselectAllImages($scope.model.selectedImages);
} }
if(!folder){ if (!folder) {
folder = {id: -1, name: "Media", icon: "icon-folder"}; folder = { id: -1, name: "Media", icon: "icon-folder" };
} }
if (folder.id > 0) { if (folder.id > 0) {
entityResource.getAncestors(folder.id, "media") entityResource.getAncestors(folder.id, "media")
.then(function(anc) { .then(function(anc) {
// anc.splice(0,1); // anc.splice(0,1);
$scope.path = _.filter(anc, function (f) { $scope.path = _.filter(anc,
return f.path.indexOf($scope.startNodeId) !== -1; function(f) {
}); return f.path.indexOf($scope.startNodeId) !== -1;
});
}); });
}
else { mediaTypeHelper.getAllowedImagetypes(folder.id)
.then(function(types) {
$scope.acceptedMediatypes = types;
});
} else {
$scope.path = []; $scope.path = [];
} }
//mediaResource.rootMedia() //mediaResource.rootMedia()
mediaResource.getChildren(folder.id) mediaResource.getChildren(folder.id)
.then(function(data) { .then(function(data) {
$scope.searchTerm = ""; $scope.searchTerm = "";
$scope.images = data.items ? data.items : []; $scope.images = data.items ? data.items : [];
// set already selected images to selected // set already selected images to selected
for (var folderImageIndex = 0; folderImageIndex < $scope.images.length; folderImageIndex++) { for (var folderImageIndex = 0; folderImageIndex < $scope.images.length; folderImageIndex++) {
var folderImage = $scope.images[folderImageIndex];
var imageIsSelected = false;
var folderImage = $scope.images[folderImageIndex]; for (var selectedImageIndex = 0;
var imageIsSelected = false; selectedImageIndex < $scope.model.selectedImages.length;
selectedImageIndex++) {
var selectedImage = $scope.model.selectedImages[selectedImageIndex];
for (var selectedImageIndex = 0; selectedImageIndex < $scope.model.selectedImages.length; selectedImageIndex++) { if (folderImage.key === selectedImage.key) {
var selectedImage = $scope.model.selectedImages[selectedImageIndex]; imageIsSelected = true;
}
if(folderImage.key === selectedImage.key) {
imageIsSelected = true;
} }
} if (imageIsSelected) {
folderImage.selected = true;
if(imageIsSelected) { }
folderImage.selected = true; }
} });
}
});
$scope.currentFolder = folder; $scope.currentFolder = folder;
// for some reason i cannot set cookies with cookieStore // for some reason i cannot set cookies with cookieStore
document.cookie="umbLastOpenedMediaNodeId=" + folder.id; document.cookie = "umbLastOpenedMediaNodeId=" + folder.id;
}; };
@@ -3529,52 +3540,40 @@ angular.module("umbraco")
eventsService.emit("dialogs.mediaPicker.select", image); eventsService.emit("dialogs.mediaPicker.select", image);
selectImage(image); selectImage(image);
} }
} else { } else {
eventsService.emit("dialogs.mediaPicker.select", image); eventsService.emit("dialogs.mediaPicker.select", image);
if ($scope.showDetails) {
if($scope.showDetails) {
$scope.target = image; $scope.target = image;
$scope.target.url = mediaHelper.resolveFile(image); $scope.target.url = mediaHelper.resolveFile(image);
$scope.openDetailsDialog(); $scope.openDetailsDialog();
} else { } else {
selectImage(image); selectImage(image);
} }
} }
}; };
$scope.clickItemName = function(item) { $scope.clickItemName = function(item) {
if(item.isFolder) { if (item.isFolder) {
$scope.gotoFolder(item); $scope.gotoFolder(item);
} }
}; };
function selectImage(image) { function selectImage(image) {
if (image.selected) {
if(image.selected) { for (var i = 0; $scope.model.selectedImages.length > i; i++) {
for(var i = 0; $scope.model.selectedImages.length > i; i++) {
var imageInSelection = $scope.model.selectedImages[i]; var imageInSelection = $scope.model.selectedImages[i];
if(image.key === imageInSelection.key) { if (image.key === imageInSelection.key) {
image.selected = false; image.selected = false;
$scope.model.selectedImages.splice(i, 1); $scope.model.selectedImages.splice(i, 1);
} }
} }
} else { } else {
if (!$scope.multiPicker) {
if(!$scope.multiPicker) {
deselectAllImages($scope.model.selectedImages); deselectAllImages($scope.model.selectedImages);
} }
image.selected = true; image.selected = true;
$scope.model.selectedImages.push(image); $scope.model.selectedImages.push(image);
} }
} }
function deselectAllImages(images) { function deselectAllImages(images) {
@@ -3585,68 +3584,68 @@ angular.module("umbraco")
images.length = 0; images.length = 0;
} }
$scope.onUploadComplete = function () { $scope.onUploadComplete = function() {
$scope.gotoFolder($scope.currentFolder); $scope.gotoFolder($scope.currentFolder);
}; };
$scope.onFilesQueue = function(){ $scope.onFilesQueue = function() {
$scope.activeDrag = false; $scope.activeDrag = false;
}; };
//default root item //default root item
if (!$scope.target) { if (!$scope.target) {
if ($scope.lastOpenedNode && $scope.lastOpenedNode !== -1) {
entityResource.getById($scope.lastOpenedNode, "media")
.then(function(node) {
// make sure that las opened node is on the same path as start node
var nodePath = node.path.split(",");
if($scope.lastOpenedNode && $scope.lastOpenedNode !== -1) { if (nodePath.indexOf($scope.startNodeId.toString()) !== -1) {
$scope
entityResource.getById($scope.lastOpenedNode, "media") .gotoFolder({ id: $scope.lastOpenedNode, name: "Media", icon: "icon-folder" });
.then(function(node){ } else {
$scope.gotoFolder({ id: $scope.startNodeId, name: "Media", icon: "icon-folder" });
// make sure that las opened node is on the same path as start node }
var nodePath = node.path.split(","); },
function(err) {
if(nodePath.indexOf($scope.startNodeId.toString()) !== -1) { $scope.gotoFolder({ id: $scope.startNodeId, name: "Media", icon: "icon-folder" });
$scope.gotoFolder({id: $scope.lastOpenedNode, name: "Media", icon: "icon-folder"}); });
} else { } else {
$scope.gotoFolder({id: $scope.startNodeId, name: "Media", icon: "icon-folder"}); $scope.gotoFolder({ id: $scope.startNodeId, name: "Media", icon: "icon-folder" });
} }
}, function (err) {
$scope.gotoFolder({id: $scope.startNodeId, name: "Media", icon: "icon-folder"});
});
} else {
$scope.gotoFolder({id: $scope.startNodeId, name: "Media", icon: "icon-folder"});
}
} }
$scope.openDetailsDialog = function() { $scope.openDetailsDialog = function() {
$scope.mediaPickerDetailsOverlay = {}; $scope.mediaPickerDetailsOverlay = {};
$scope.mediaPickerDetailsOverlay.show = true; $scope.mediaPickerDetailsOverlay.show = true;
$scope.mediaPickerDetailsOverlay.submit = function(model) { $scope.mediaPickerDetailsOverlay.submit = function(model) {
$scope.model.selectedImages.push($scope.target);
$scope.model.submit($scope.model);
$scope.model.selectedImages.push($scope.target); $scope.mediaPickerDetailsOverlay.show = false;
$scope.model.submit($scope.model); $scope.mediaPickerDetailsOverlay = null;
};
$scope.mediaPickerDetailsOverlay.show = false;
$scope.mediaPickerDetailsOverlay = null;
};
$scope.mediaPickerDetailsOverlay.close = function(oldModel) {
$scope.mediaPickerDetailsOverlay.show = false;
$scope.mediaPickerDetailsOverlay = null;
};
$scope.mediaPickerDetailsOverlay.close = function(oldModel) {
$scope.mediaPickerDetailsOverlay.show = false;
$scope.mediaPickerDetailsOverlay = null;
};
}; };
}); });
angular.module("umbraco").controller("Umbraco.Overlays.MediaTypePickerController",
function ($scope) {
$scope.select = function(mediatype){
$scope.model.selectedType = mediatype;
$scope.model.submit($scope.model);
$scope.model.show = false;
}
});
//used for the member picker dialog //used for the member picker dialog
angular.module("umbraco").controller("Umbraco.Overlays.MemberGroupPickerController", angular.module("umbraco").controller("Umbraco.Overlays.MemberGroupPickerController",
function($scope, eventsService, entityResource, searchService, $log, localizationService) { function($scope, eventsService, entityResource, searchService, $log, localizationService) {
@@ -4159,7 +4158,7 @@ angular.module("umbraco").controller("Umbraco.Overlays.TreePickerController",
} }
}); });
} else { } else {
var a = dialogOptions.filter.toLowerCase().split(','); var a = dialogOptions.filter.toLowerCase().replace(/\s/g, '').split(',');
angular.forEach(nodes, function (value, key) { angular.forEach(nodes, function (value, key) {
var found = a.indexOf(value.metaData.contentType.toLowerCase()) >= 0; var found = a.indexOf(value.metaData.contentType.toLowerCase()) >= 0;
@@ -5322,9 +5321,42 @@ function startUpVideosDashboardController($scope, xmlhelper, $log, $http) {
}); });
}; };
} }
angular.module("umbraco").controller("Umbraco.Dashboard.StartupVideosController", startUpVideosDashboardController); angular.module("umbraco").controller("Umbraco.Dashboard.StartupVideosController", startUpVideosDashboardController);
function startUpDynamicContentController(dashboardResource, assetsService) {
var vm = this;
vm.loading = true;
vm.showDefault = false;
//proxy remote css through the local server
assetsService.loadCss( dashboardResource.getRemoteDashboardCssUrl("content") );
dashboardResource.getRemoteDashboardContent("content").then(
function (data) {
vm.loading = false;
//test if we have received valid data
//we capture it like this, so we avoid UI errors - which automatically triggers ui based on http response code
if (data && data.sections) {
vm.dashboard = data;
} else{
vm.showDefault = true;
}
},
function (exception) {
console.error(exception);
vm.loading = false;
vm.showDefault = true;
});
}
angular.module("umbraco").controller("Umbraco.Dashboard.StartUpDynamicContentController", startUpDynamicContentController);
function FormsController($scope, $route, $cookieStore, packageResource, localizationService) { function FormsController($scope, $route, $cookieStore, packageResource, localizationService) {
$scope.installForms = function(){ $scope.installForms = function(){
$scope.state = localizationService.localize("packager_installStateDownloading"); $scope.state = localizationService.localize("packager_installStateDownloading");
@@ -5500,27 +5532,43 @@ function startupLatestEditsController($scope) {
} }
angular.module("umbraco").controller("Umbraco.Dashboard.StartupLatestEditsController", startupLatestEditsController); angular.module("umbraco").controller("Umbraco.Dashboard.StartupLatestEditsController", startupLatestEditsController);
function MediaFolderBrowserDashboardController($rootScope, $scope, contentTypeResource) { function MediaFolderBrowserDashboardController($rootScope, $scope, $location, contentTypeResource, userService) {
//get the system media listview var currentUser = {};
contentTypeResource.getPropertyTypeScaffold(-96)
.then(function(dt) {
$scope.fakeProperty = { userService.getCurrentUser().then(function (user) {
alias: "contents",
config: dt.config, currentUser = user;
description: "",
editor: dt.editor, // check if the user start node is the dashboard
hideLabel: true, if(currentUser.startMediaId === -1) {
id: 1,
label: "Contents:", //get the system media listview
validation: { contentTypeResource.getPropertyTypeScaffold(-96)
mandatory: false, .then(function(dt) {
pattern: null
}, $scope.fakeProperty = {
value: "", alias: "contents",
view: dt.view config: dt.config,
}; description: "",
editor: dt.editor,
hideLabel: true,
id: 1,
label: "Contents:",
validation: {
mandatory: false,
pattern: null
},
value: "",
view: dt.view
};
});
} else {
// redirect to start node
$location.path("/media/media/edit/" + currentUser.startMediaId);
}
}); });
@@ -9016,6 +9064,7 @@ angular.module("umbraco").controller("Umbraco.Editors.Packages.DeleteController"
status: "", status: "",
progress:0 progress:0
}; };
vm.installCompleted = false;
vm.zipFile = { vm.zipFile = {
uploadStatus: "idle", uploadStatus: "idle",
uploadProgress: 0, uploadProgress: 0,
@@ -9038,6 +9087,9 @@ angular.module("umbraco").controller("Umbraco.Editors.Packages.DeleteController"
file: file file: file
}).progress(function (evt) { }).progress(function (evt) {
// set view state to uploading
vm.state = 'uploading';
// calculate progress in percentage // calculate progress in percentage
var progressPercentage = parseInt(100.0 * evt.loaded / evt.total, 10); var progressPercentage = parseInt(100.0 * evt.loaded / evt.total, 10);
@@ -9138,10 +9190,10 @@ angular.module("umbraco").controller("Umbraco.Editors.Packages.DeleteController"
localStorageService.set("packageInstallUri", "installed"); localStorageService.set("packageInstallUri", "installed");
} }
//reload on next digest (after cookie) vm.installState.status = localizationService.localize("packager_installStateCompleted");
$timeout(function () { vm.installCompleted = true;
$window.location.reload(true);
});
}, },
installError); installError);
@@ -9151,6 +9203,13 @@ angular.module("umbraco").controller("Umbraco.Editors.Packages.DeleteController"
//This will return a rejection meaning that the promise change above will stop //This will return a rejection meaning that the promise change above will stop
return $q.reject(); return $q.reject();
} }
vm.reloadPage = function() {
//reload on next digest (after cookie)
$timeout(function () {
$window.location.reload(true);
});
}
} }
angular.module("umbraco").controller("Umbraco.Editors.Packages.InstallLocalController", PackagesInstallLocalController); angular.module("umbraco").controller("Umbraco.Editors.Packages.InstallLocalController", PackagesInstallLocalController);
@@ -9252,6 +9311,7 @@ angular.module("umbraco").controller("Umbraco.Editors.Packages.DeleteController"
vm.openLightbox = openLightbox; vm.openLightbox = openLightbox;
vm.closeLightbox = closeLightbox; vm.closeLightbox = closeLightbox;
vm.search = search; vm.search = search;
vm.installCompleted = false;
var currSort = "Latest"; var currSort = "Latest";
//used to cancel any request in progress if another one needs to take it's place //used to cancel any request in progress if another one needs to take it's place
@@ -9437,10 +9497,8 @@ angular.module("umbraco").controller("Umbraco.Editors.Packages.DeleteController"
localStorageService.set("packageInstallUri", result.postInstallationPath); localStorageService.set("packageInstallUri", result.postInstallationPath);
} }
//reload on next digest (after cookie) vm.installState.status = localizationService.localize("packager_installStateCompleted");
$timeout(function() { vm.installCompleted = true;
window.location.reload(true);
});
}, },
error); error);
@@ -9499,6 +9557,13 @@ angular.module("umbraco").controller("Umbraco.Editors.Packages.DeleteController"
searchDebounced(); searchDebounced();
} }
vm.reloadPage = function () {
//reload on next digest (after cookie)
$timeout(function () {
window.location.reload(true);
});
}
init(); init();
} }
@@ -11112,7 +11177,7 @@ angular.module("umbraco")
}; };
$scope.scaleDown = function(section){ $scope.scaleDown = function(section){
var remove = (section.grid > 1) ? 1 : section.grid; var remove = (section.grid > 1) ? 1 : 0;
section.grid = section.grid-remove; section.grid = section.grid-remove;
}; };
@@ -11145,9 +11210,12 @@ angular.module("umbraco")
$scope.currentSection = section; $scope.currentSection = section;
}; };
$scope.deleteSection = function(section, template) {
$scope.deleteSection = function(index){ if ($scope.currentSection === section) {
$scope.currentTemplate.sections.splice(index, 1); $scope.currentSection = undefined;
}
var index = template.sections.indexOf(section)
template.sections.splice(index, 1);
}; };
$scope.closeSection = function(){ $scope.closeSection = function(){
@@ -11182,7 +11250,7 @@ function RowConfigController($scope) {
}; };
$scope.scaleDown = function(section) { $scope.scaleDown = function(section) {
var remove = (section.grid > 1) ? 1 : section.grid; var remove = (section.grid > 1) ? 1 : 0;
section.grid = section.grid - remove; section.grid = section.grid - remove;
}; };
@@ -11226,9 +11294,14 @@ function RowConfigController($scope) {
} }
}; };
$scope.deleteArea = function(index) { $scope.deleteArea = function (cell, row) {
$scope.currentRow.areas.splice(index, 1); if ($scope.currentCell === cell) {
$scope.currentCell = undefined;
}
var index = row.areas.indexOf(cell)
row.areas.splice(index, 1);
}; };
$scope.closeArea = function() { $scope.closeArea = function() {
$scope.currentCell = undefined; $scope.currentCell = undefined;
}; };
@@ -11852,6 +11925,37 @@ angular.module("umbraco")
} }
}; };
var shouldApply = function(item, itemType, gridItem) {
if (item.applyTo === undefined || item.applyTo === null || item.applyTo === "") {
return true;
}
if (typeof (item.applyTo) === "string") {
return item.applyTo === itemType;
}
if (itemType === "row") {
if (item.applyTo.row === undefined) {
return false;
}
if (item.applyTo.row === null || item.applyTo.row === "") {
return true;
}
var rows = item.applyTo.row.split(',');
return _.indexOf(rows, gridItem.name) !== -1;
} else if (itemType === "cell") {
if (item.applyTo.cell === undefined) {
return false;
}
if (item.applyTo.cell === null || item.applyTo.cell === "") {
return true;
}
var cells = item.applyTo.cell.split(',');
var cellSize = gridItem.grid.toString();
return _.indexOf(cells, cellSize) !== -1;
}
}
$scope.editGridItemSettings = function (gridItem, itemType) { $scope.editGridItemSettings = function (gridItem, itemType) {
placeHolder = "{0}"; placeHolder = "{0}";
@@ -11861,8 +11965,8 @@ angular.module("umbraco")
styles = null; styles = null;
config = angular.copy(gridItem.editor.config.settings); config = angular.copy(gridItem.editor.config.settings);
} else { } else {
styles = _.filter(angular.copy($scope.model.config.items.styles), function (item) { return (item.applyTo === undefined || item.applyTo === itemType); }); styles = _.filter(angular.copy($scope.model.config.items.styles), function (item) { return shouldApply(item, itemType, gridItem); });
config = _.filter(angular.copy($scope.model.config.items.config), function (item) { return (item.applyTo === undefined || item.applyTo === itemType); }); config = _.filter(angular.copy($scope.model.config.items.config), function (item) { return shouldApply(item, itemType, gridItem); });
} }
if(angular.isObject(gridItem.config)){ if(angular.isObject(gridItem.config)){
@@ -12437,6 +12541,7 @@ angular.module("umbraco")
layouts:[ layouts:[
{ {
label: "Headline",
name: "Headline", name: "Headline",
areas: [ areas: [
{ {
@@ -12446,6 +12551,7 @@ angular.module("umbraco")
] ]
}, },
{ {
label: "Article",
name: "Article", name: "Article",
areas: [ areas: [
{ {
@@ -12809,7 +12915,7 @@ angular.module('umbraco')
//NOTE: The 'entity' can be either a normal media entity or an "entity" returned from the entityResource //NOTE: The 'entity' can be either a normal media entity or an "entity" returned from the entityResource
// they contain different data structures so if we need to query against it we need to be aware of this. // they contain different data structures so if we need to query against it we need to be aware of this.
mediaHelper.registerFileResolver("Umbraco.ImageCropper", function (property, entity, thumbnail) { mediaHelper.registerFileResolver("Umbraco.ImageCropper", function (property, entity, thumbnail) {
if (property.value.src) { if (property.value && property.value.src) {
if (thumbnail === true) { if (thumbnail === true) {
return property.value.src + "?width=500&mode=max&animationprocessmode=first"; return property.value.src + "?width=500&mode=max&animationprocessmode=first";
@@ -13142,7 +13248,7 @@ angular.module("umbraco").controller("Umbraco.PrevalueEditors.IncludePropertiesL
(function() { (function() {
"use strict"; "use strict";
function ListViewGridLayoutController($scope, $routeParams, mediaHelper, mediaResource, $location, listViewHelper) { function ListViewGridLayoutController($scope, $routeParams, mediaHelper, mediaResource, $location, listViewHelper, mediaTypeHelper) {
var vm = this; var vm = this;
@@ -13154,6 +13260,7 @@ angular.module("umbraco").controller("Umbraco.PrevalueEditors.IncludePropertiesL
vm.mediaDetailsTooltip = {}; vm.mediaDetailsTooltip = {};
vm.itemsWithoutFolders = []; vm.itemsWithoutFolders = [];
vm.isRecycleBin = $scope.contentId === '-21' || $scope.contentId === '-20'; vm.isRecycleBin = $scope.contentId === '-21' || $scope.contentId === '-20';
vm.acceptedMediatypes = [];
vm.dragEnter = dragEnter; vm.dragEnter = dragEnter;
vm.dragLeave = dragLeave; vm.dragLeave = dragLeave;
@@ -13168,6 +13275,13 @@ angular.module("umbraco").controller("Umbraco.PrevalueEditors.IncludePropertiesL
function activate() { function activate() {
vm.itemsWithoutFolders = filterOutFolders($scope.items); vm.itemsWithoutFolders = filterOutFolders($scope.items);
if($scope.entityType === 'media') {
mediaTypeHelper.getAllowedImagetypes(vm.nodeId).then(function (types) {
vm.acceptedMediatypes = types;
});
}
} }
function filterOutFolders(items) { function filterOutFolders(items) {
@@ -13249,7 +13363,7 @@ angular.module("umbraco").controller("Umbraco.PrevalueEditors.IncludePropertiesL
(function () { (function () {
"use strict"; "use strict";
function ListViewListLayoutController($scope, listViewHelper, $location, mediaHelper) { function ListViewListLayoutController($scope, listViewHelper, $location, mediaHelper, mediaTypeHelper) {
var vm = this; var vm = this;
@@ -13259,6 +13373,7 @@ angular.module("umbraco").controller("Umbraco.PrevalueEditors.IncludePropertiesL
vm.maxFileSize = Umbraco.Sys.ServerVariables.umbracoSettings.maxFileSize + "KB"; vm.maxFileSize = Umbraco.Sys.ServerVariables.umbracoSettings.maxFileSize + "KB";
vm.activeDrag = false; vm.activeDrag = false;
vm.isRecycleBin = $scope.contentId === '-21' || $scope.contentId === '-20'; vm.isRecycleBin = $scope.contentId === '-21' || $scope.contentId === '-20';
vm.acceptedMediatypes = [];
vm.selectItem = selectItem; vm.selectItem = selectItem;
vm.clickItem = clickItem; vm.clickItem = clickItem;
@@ -13271,38 +13386,49 @@ angular.module("umbraco").controller("Umbraco.PrevalueEditors.IncludePropertiesL
vm.onFilesQueue = onFilesQueue; vm.onFilesQueue = onFilesQueue;
vm.onUploadComplete = onUploadComplete; vm.onUploadComplete = onUploadComplete;
function activate() {
if ($scope.entityType === 'media') {
mediaTypeHelper.getAllowedImagetypes(vm.nodeId).then(function (types) {
vm.acceptedMediatypes = types;
});
}
}
function selectAll($event) { function selectAll($event) {
listViewHelper.selectAllItems($scope.items, $scope.selection, $event); listViewHelper.selectAllItems($scope.items, $scope.selection, $event);
} }
function isSelectedAll() { function isSelectedAll() {
return listViewHelper.isSelectedAll($scope.items, $scope.selection); return listViewHelper.isSelectedAll($scope.items, $scope.selection);
} }
function selectItem(selectedItem, $index, $event) { function selectItem(selectedItem, $index, $event) {
listViewHelper.selectHandler(selectedItem, $index, $scope.items, $scope.selection, $event); listViewHelper.selectHandler(selectedItem, $index, $scope.items, $scope.selection, $event);
} }
function clickItem(item) { function clickItem(item) {
$location.path($scope.entityType + '/' +$scope.entityType + '/edit/' +item.id); // if item.id is 2147483647 (int.MaxValue) use item.key
} $location.path($scope.entityType + '/' +$scope.entityType + '/edit/' + (item.id === 2147483647 ? item.key : item.id));
}
function isSortDirection(col, direction) { function isSortDirection(col, direction) {
return listViewHelper.setSortingDirection(col, direction, $scope.options); return listViewHelper.setSortingDirection(col, direction, $scope.options);
} }
function sort(field, allow, isSystem) { function sort(field, allow, isSystem) {
if (allow) { if (allow) {
$scope.options.orderBySystemField = isSystem; $scope.options.orderBySystemField = isSystem;
listViewHelper.setSorting(field, allow, $scope.options); listViewHelper.setSorting(field, allow, $scope.options);
$scope.getContent($scope.contentId); $scope.getContent($scope.contentId);
} }
} }
// Dropzone upload functions // Dropzone upload functions
function dragEnter(el, event) { function dragEnter(el, event) {
vm.activeDrag = true; vm.activeDrag = true;
} }
function dragLeave(el, event) { function dragLeave(el, event) {
vm.activeDrag = false; vm.activeDrag = false;
@@ -13310,11 +13436,13 @@ angular.module("umbraco").controller("Umbraco.PrevalueEditors.IncludePropertiesL
function onFilesQueue() { function onFilesQueue() {
vm.activeDrag = false; vm.activeDrag = false;
} }
function onUploadComplete() { function onUploadComplete() {
$scope.getContent($scope.contentId); $scope.getContent($scope.contentId);
} }
activate();
} }
@@ -15695,7 +15823,7 @@ function sliderController($scope, $log, $element, assetsService, angularHelper)
angular.module("umbraco").controller("Umbraco.PropertyEditors.SliderController", sliderController); angular.module("umbraco").controller("Umbraco.PropertyEditors.SliderController", sliderController);
angular.module("umbraco") angular.module("umbraco")
.controller("Umbraco.PropertyEditors.TagsController", .controller("Umbraco.PropertyEditors.TagsController",
function ($rootScope, $scope, $log, assetsService, umbRequestHelper, angularHelper, $timeout, $element) { function ($rootScope, $scope, $log, assetsService, umbRequestHelper, angularHelper, $timeout, $element, $sanitize) {
var $typeahead; var $typeahead;
@@ -15736,6 +15864,7 @@ angular.module("umbraco")
//Helper method to add a tag on enter or on typeahead select //Helper method to add a tag on enter or on typeahead select
function addTag(tagToAdd) { function addTag(tagToAdd) {
tagToAdd = String(tagToAdd).htmlEncode();
if (tagToAdd != null && tagToAdd.length > 0) { if (tagToAdd != null && tagToAdd.length > 0) {
if ($scope.model.value.indexOf(tagToAdd) < 0) { if ($scope.model.value.indexOf(tagToAdd) < 0) {
$scope.model.value.push(tagToAdd); $scope.model.value.push(tagToAdd);
+208 -191
View File
@@ -4275,9 +4275,13 @@ angular.module("umbraco.directives")
$timeout(function(){ $timeout(function(){
setDimensions(); setDimensions();
}); });
var offsetX = $overlay[0].offsetLeft; // Make sure we can find the offset values for the overlay(dot) before calculating
var offsetY = $overlay[0].offsetTop; // fixes issue with resize event when printing the page (ex. hitting ctrl+p inside the rte)
calculateGravity(offsetX, offsetY); if($overlay.is(':visible')) {
var offsetX = $overlay[0].offsetLeft;
var offsetY = $overlay[0].offsetTop;
calculateGravity(offsetX, offsetY);
}
}); });
}); });
@@ -5338,6 +5342,8 @@ angular.module("umbraco.directives")
var curr = $(event.target); // active tab var curr = $(event.target); // active tab
var prev = $(event.relatedTarget); // previous tab var prev = $(event.relatedTarget); // previous tab
$scope.$apply();
for (var c in callbacks) { for (var c in callbacks) {
callbacks[c].apply(this, [{current: curr, previous: prev}]); callbacks[c].apply(this, [{current: curr, previous: prev}]);
} }
@@ -9719,215 +9725,226 @@ Use this directive to render a tooltip.
/* /*
TODO TODO
.directive("umbFileDrop", function ($timeout, $upload, localizationService, umbRequestHelper){ .directive("umbFileDrop", function ($timeout, $upload, localizationService, umbRequestHelper){
return{
return{ restrict: "A",
restrict: "A", link: function(scope, element, attrs){
link: function(scope, element, attrs){ //load in the options model
}
//load in the options model }
}
}
}) })
*/ */
angular.module("umbraco.directives") angular.module("umbraco.directives")
.directive('umbFileDropzone',
function($timeout, Upload, localizationService, umbRequestHelper) {
return {
restrict: 'E',
replace: true,
templateUrl: 'views/components/upload/umb-file-dropzone.html',
scope: {
parentId: '@',
contentTypeAlias: '@',
propertyAlias: '@',
accept: '@',
maxFileSize: '@',
.directive('umbFileDropzone', function ($timeout, Upload, localizationService, umbRequestHelper) { compact: '@',
return { hideDropzone: '@',
acceptedMediatypes: '=',
restrict: 'E', filesQueued: '=',
replace: true, handleFile: '=',
filesUploaded: '='
},
link: function(scope, element, attrs) {
scope.queue = [];
scope.done = [];
scope.rejected = [];
scope.currentFile = undefined;
templateUrl: 'views/components/upload/umb-file-dropzone.html', function _filterFile(file) {
var ignoreFileNames = ['Thumbs.db'];
var ignoreFileTypes = ['directory'];
scope: { // ignore files with names from the list
parentId: '@', // ignore files with types from the list
contentTypeAlias: '@', // ignore files which starts with "."
propertyAlias: '@', if (ignoreFileNames.indexOf(file.name) === -1 &&
accept: '@', ignoreFileTypes.indexOf(file.type) === -1 &&
maxFileSize: '@', file.name.indexOf(".") !== 0) {
return true;
} else {
return false;
}
}
compact: '@', function _filesQueued(files, event) {
hideDropzone: '@', //Push into the queue
angular.forEach(files,
function(file) {
filesQueued: '=', if (_filterFile(file) === true) {
handleFile: '=',
filesUploaded: '='
},
link: function(scope, element, attrs) { if (file.$error) {
scope.rejected.push(file);
} else {
scope.queue.push(file);
}
}
});
scope.queue = []; //when queue is done, kick the uploader
scope.done = []; if (!scope.working) {
scope.rejected = []; // Upload not allowed
scope.currentFile = undefined; if (!scope.acceptedMediatypes || !scope.acceptedMediatypes.length) {
files.map(function(file) {
file.uploadStatus = "error";
file.serverErrorMessage = "File type is not allowed here";
scope.rejected.push(file);
});
scope.queue = [];
}
// One allowed type
if (scope.acceptedMediatypes && scope.acceptedMediatypes.length === 1) {
// Standard setup - set alias to auto select to let the server best decide which media type to use
if (scope.acceptedMediatypes[0].alias === 'Image') {
scope.contentTypeAlias = "umbracoAutoSelect";
} else {
scope.contentTypeAlias = scope.acceptedMediatypes[0].alias;
}
function _filterFile(file) { _processQueueItem();
}
// More than one, open dialog
if (scope.acceptedMediatypes && scope.acceptedMediatypes.length > 1) {
_chooseMediaType();
}
}
}
var ignoreFileNames = ['Thumbs.db']; function _processQueueItem() {
var ignoreFileTypes = ['directory']; if (scope.queue.length > 0) {
scope.currentFile = scope.queue.shift();
_upload(scope.currentFile);
} else if (scope.done.length > 0) {
if (scope.filesUploaded) {
//queue is empty, trigger the done action
scope.filesUploaded(scope.done);
}
// ignore files with names from the list //auto-clear the done queue after 3 secs
// ignore files with types from the list var currentLength = scope.done.length;
// ignore files which starts with "." $timeout(function() {
if(ignoreFileNames.indexOf(file.name) === -1 && scope.done.splice(0, currentLength);
ignoreFileTypes.indexOf(file.type) === -1 && },
file.name.indexOf(".") !== 0) { 3000);
return true; }
} else { }
return false;
}
} function _upload(file) {
function _filesQueued(files, event){ scope.propertyAlias = scope.propertyAlias ? scope.propertyAlias : "umbracoFile";
scope.contentTypeAlias = scope.contentTypeAlias ? scope.contentTypeAlias : "Image";
//Push into the queue Upload.upload({
angular.forEach(files, function(file){ url: umbRequestHelper.getApiUrl("mediaApiBaseUrl", "PostAddFile"),
fields: {
'currentFolder': scope.parentId,
'contentTypeAlias': scope.contentTypeAlias,
'propertyAlias': scope.propertyAlias,
'path': file.path
},
file: file
})
.progress(function(evt) {
// calculate progress in percentage
var progressPercentage = parseInt(100.0 * evt.loaded / evt.total, 10);
// set percentage property on file
file.uploadProgress = progressPercentage;
// set uploading status on file
file.uploadStatus = "uploading";
})
.success(function(data, status, headers, config) {
if (data.notifications && data.notifications.length > 0) {
// set error status on file
file.uploadStatus = "error";
// Throw message back to user with the cause of the error
file.serverErrorMessage = data.notifications[0].message;
// Put the file in the rejected pool
scope.rejected.push(file);
} else {
// set done status on file
file.uploadStatus = "done";
// set date/time for when done - used for sorting
file.doneDate = new Date();
// Put the file in the done pool
scope.done.push(file);
}
scope.currentFile = undefined;
//after processing, test if everthing is done
_processQueueItem();
})
.error(function(evt, status, headers, config) {
// set status done
file.uploadStatus = "error";
//if the service returns a detailed error
if (evt.InnerException) {
file.serverErrorMessage = evt.InnerException.ExceptionMessage;
//Check if its the common "too large file" exception
if (evt.InnerException.StackTrace &&
evt.InnerException.StackTrace.indexOf("ValidateRequestEntityLength") > 0) {
file.serverErrorMessage = "File too large to upload";
}
} else if (evt.Message) {
file.serverErrorMessage = evt.Message;
}
// If file not found, server will return a 404 and display this message
if (status === 404) {
file.serverErrorMessage = "File not found";
}
//after processing, test if everthing is done
scope.rejected.push(file);
scope.currentFile = undefined;
_processQueueItem();
});
}
if(_filterFile(file) === true) { function _chooseMediaType() {
scope.mediatypepickerOverlay = {
view: "mediatypepicker",
title: "Choose media type",
acceptedMediatypes: scope.acceptedMediatypes,
hideSubmitButton: true,
show: true,
submit: function(model) {
scope.contentTypeAlias = model.selectedType.alias;
scope.mediatypepickerOverlay.show = false;
scope.mediatypepickerOverlay = null;
_processQueueItem();
},
close: function(oldModel) {
if(file.$error) { scope.queue.map(function(file) {
scope.rejected.push(file); file.uploadStatus = "error";
} else { file.serverErrorMessage = "Cannot upload this file, no mediatype selected";
scope.queue.push(file); scope.rejected.push(file);
} });
scope.queue = [];
scope.mediatypepickerOverlay.show = false;
scope.mediatypepickerOverlay = null;
}
};
}
} scope.handleFiles = function(files, event) {
if (scope.filesQueued) {
}); scope.filesQueued(files, event);
}
//when queue is done, kick the uploader _filesQueued(files, event);
if(!scope.working){ };
_processQueueItem(); }
} };
} });
function _processQueueItem(){
if(scope.queue.length > 0){
scope.currentFile = scope.queue.shift();
_upload(scope.currentFile);
}else if(scope.done.length > 0){
if(scope.filesUploaded){
//queue is empty, trigger the done action
scope.filesUploaded(scope.done);
}
//auto-clear the done queue after 3 secs
var currentLength = scope.done.length;
$timeout(function(){
scope.done.splice(0, currentLength);
}, 3000);
}
}
function _upload(file) {
scope.propertyAlias = scope.propertyAlias ? scope.propertyAlias : "umbracoFile";
scope.contentTypeAlias = scope.contentTypeAlias ? scope.contentTypeAlias : "Image";
Upload.upload({
url: umbRequestHelper.getApiUrl("mediaApiBaseUrl", "PostAddFile"),
fields: {
'currentFolder': scope.parentId,
'contentTypeAlias': scope.contentTypeAlias,
'propertyAlias': scope.propertyAlias,
'path': file.path
},
file: file
}).progress(function (evt) {
// calculate progress in percentage
var progressPercentage = parseInt(100.0 * evt.loaded / evt.total, 10);
// set percentage property on file
file.uploadProgress = progressPercentage;
// set uploading status on file
file.uploadStatus = "uploading";
}).success(function (data, status, headers, config) {
if(data.notifications && data.notifications.length > 0) {
// set error status on file
file.uploadStatus = "error";
// Throw message back to user with the cause of the error
file.serverErrorMessage = data.notifications[0].message;
// Put the file in the rejected pool
scope.rejected.push(file);
} else {
// set done status on file
file.uploadStatus = "done";
// set date/time for when done - used for sorting
file.doneDate = new Date();
// Put the file in the done pool
scope.done.push(file);
}
scope.currentFile = undefined;
//after processing, test if everthing is done
_processQueueItem();
}).error( function (evt, status, headers, config) {
// set status done
file.uploadStatus = "error";
//if the service returns a detailed error
if (evt.InnerException) {
file.serverErrorMessage = evt.InnerException.ExceptionMessage;
//Check if its the common "too large file" exception
if (evt.InnerException.StackTrace && evt.InnerException.StackTrace.indexOf("ValidateRequestEntityLength") > 0) {
file.serverErrorMessage = "File too large to upload";
}
} else if (evt.Message) {
file.serverErrorMessage = evt.Message;
}
// If file not found, server will return a 404 and display this message
if(status === 404 ) {
file.serverErrorMessage = "File not found";
}
//after processing, test if everthing is done
scope.rejected.push(file);
scope.currentFile = undefined;
_processQueueItem();
});
}
scope.handleFiles = function(files, event){
if(scope.filesQueued){
scope.filesQueued(files, event);
}
_filesQueued(files, event);
};
}
};
});
/** /**
* @ngdoc directive * @ngdoc directive
@@ -1389,7 +1389,6 @@ function dashboardResource($q, $http, umbRequestHelper) {
* *
*/ */
getDashboard: function (section) { getDashboard: function (section) {
return umbRequestHelper.resourcePromise( return umbRequestHelper.resourcePromise(
$http.get( $http.get(
umbRequestHelper.getApiUrl( umbRequestHelper.getApiUrl(
@@ -1397,7 +1396,53 @@ function dashboardResource($q, $http, umbRequestHelper) {
"GetDashboard", "GetDashboard",
[{ section: section }])), [{ section: section }])),
'Failed to get dashboard ' + section); 'Failed to get dashboard ' + section);
},
/**
* @ngdoc method
* @name umbraco.resources.dashboardResource#getRemoteDashboardContent
* @methodOf umbraco.resources.dashboardResource
*
* @description
* Retrieves dashboard content from a remote source for a given section
*
* @param {string} section Alias of section to retrieve dashboard content for
* @returns {Promise} resourcePromise object containing the user array.
*
*/
getRemoteDashboardContent: function (section, baseurl) {
//build request values with optional params
var values = [{ section: section }];
if (baseurl)
{
values.push({ baseurl: baseurl });
}
return umbRequestHelper.resourcePromise(
$http.get(
umbRequestHelper.getApiUrl(
"dashboardApiBaseUrl",
"GetRemoteDashboardContent",
values)), "Failed to get dashboard content");
},
getRemoteDashboardCssUrl: function (section, baseurl) {
//build request values with optional params
var values = [{ section: section }];
if (baseurl) {
values.push({ baseurl: baseurl });
}
return umbRequestHelper.getApiUrl(
"dashboardApiBaseUrl",
"GetRemoteDashboardCss",
values);
} }
}; };
} }
+33 -6
View File
@@ -17,6 +17,8 @@ angular.module('umbraco.security.retryQueue', [])
.factory('securityRetryQueue', ['$q', '$log', function ($q, $log) { .factory('securityRetryQueue', ['$q', '$log', function ($q, $log) {
var retryQueue = []; var retryQueue = [];
var retryUser = null;
var service = { var service = {
// The security service puts its own handler in here! // The security service puts its own handler in here!
onItemAddedCallbacks: [], onItemAddedCallbacks: [],
@@ -35,13 +37,20 @@ angular.module('umbraco.security.retryQueue', [])
} }
}); });
}, },
pushRetryFn: function(reason, retryFn) { pushRetryFn: function(reason, userName, retryFn) {
// The reason parameter is optional // The reason parameter is optional
if ( arguments.length === 1) { if ( arguments.length === 2) {
retryFn = reason; retryFn = userName;
userName = reason;
reason = undefined; reason = undefined;
} }
if ((retryUser && retryUser !== userName) || userName === null) {
throw new Error('invalid user');
}
retryUser = userName;
// The deferred object that will be resolved or rejected by calling retry or cancel // The deferred object that will be resolved or rejected by calling retry or cancel
var deferred = $q.defer(); var deferred = $q.defer();
var retryItem = { var retryItem = {
@@ -71,8 +80,19 @@ angular.module('umbraco.security.retryQueue', [])
while(service.hasMore()) { while(service.hasMore()) {
retryQueue.shift().cancel(); retryQueue.shift().cancel();
} }
retryUser = null;
}, },
retryAll: function() { retryAll: function (userName) {
if (retryUser == null) {
return;
}
if (retryUser !== userName) {
service.cancelAll();
return;
}
while(service.hasMore()) { while(service.hasMore()) {
retryQueue.shift().retry(); retryQueue.shift().retry();
} }
@@ -118,10 +138,17 @@ angular.module('umbraco.security.interceptor')
//A 401 means that the user is not logged in //A 401 means that the user is not logged in
if (originalResponse.status === 401) { if (originalResponse.status === 401) {
// The request bounced because it was not authorized - add a new request to the retry queue var userService = $injector.get('userService'); // see above
promise = queue.pushRetryFn('unauthorized-server', function retryRequest() {
//Associate the user name with the retry to ensure we retry for the right user
promise = userService.getCurrentUser()
.then(function (user) {
var userName = user ? user.name : null;
//The request bounced because it was not authorized - add a new request to the retry queue
return queue.pushRetryFn('unauthorized-server', userName, function retryRequest() {
// We must use $injector to get the $http service to prevent circular dependency // We must use $injector to get the $http service to prevent circular dependency
return $injector.get('$http')(originalResponse.config); return $injector.get('$http')(originalResponse.config);
});
}); });
} }
else if (originalResponse.status === 404) { else if (originalResponse.status === 404) {
+61 -2
View File
@@ -2195,7 +2195,7 @@ angular.module('umbraco.services')
* @description * @description
* Opens a content picker tree in a modal, the callback returns an array of selected documents * Opens a content picker tree in a modal, the callback returns an array of selected documents
* @param {Object} options content picker dialog options object * @param {Object} options content picker dialog options object
* @param {Boolean} options.multipicker should the picker return one or multiple items * @param {Boolean} options.multiPicker should the picker return one or multiple items
* @param {Function} options.callback callback function * @param {Function} options.callback callback function
* @returns {Object} modal object * @returns {Object} modal object
*/ */
@@ -4880,6 +4880,65 @@ function mediaHelper(umbRequestHelper) {
}; };
}angular.module('umbraco.services').factory('mediaHelper', mediaHelper); }angular.module('umbraco.services').factory('mediaHelper', mediaHelper);
/**
* @ngdoc service
* @name umbraco.services.mediaTypeHelper
* @description A helper service for the media types
**/
function mediaTypeHelper(mediaTypeResource, $q) {
var mediaTypeHelperService = {
getAllowedImagetypes: function (mediaId){
// Get All allowedTypes
return mediaTypeResource.getAllowedTypes(mediaId)
.then(function(types){
var allowedQ = types.map(function(type){
return mediaTypeResource.getById(type.id);
});
// Get full list
return $q.all(allowedQ).then(function(fullTypes){
// Find all the media types with an Image Cropper property editor
var filteredTypes = mediaTypeHelperService.getTypeWithEditor(fullTypes, ['Umbraco.ImageCropper']);
// If there is only one media type with an Image Cropper we will return this one
if(filteredTypes.length === 1) {
return filteredTypes;
// If there is more than one Image cropper, custom media types have been added, and we return all media types with and Image cropper or UploadField
} else {
return mediaTypeHelperService.getTypeWithEditor(fullTypes, ['Umbraco.ImageCropper', 'Umbraco.UploadField']);
}
});
});
},
getTypeWithEditor: function (types, editors) {
return types.filter(function (mediatype) {
for (var i = 0; i < mediatype.groups.length; i++) {
var group = mediatype.groups[i];
for (var j = 0; j < group.properties.length; j++) {
var property = group.properties[j];
if( editors.indexOf(property.editor) !== -1 ) {
return mediatype;
}
}
}
});
}
};
return mediaTypeHelperService;
}
angular.module('umbraco.services').factory('mediaTypeHelper', mediaTypeHelper);
/** /**
* @ngdoc service * @ngdoc service
* @name umbraco.services.umbracoMenuActions * @name umbraco.services.umbracoMenuActions
@@ -8512,7 +8571,7 @@ angular.module('umbraco.services')
loginDialog = null; loginDialog = null;
if (success) { if (success) {
securityRetryQueue.retryAll(); securityRetryQueue.retryAll(currentUser.name);
} }
else { else {
securityRetryQueue.cancelAll(); securityRetryQueue.cancelAll();
@@ -68,7 +68,7 @@ angular.module('umbraco.mocks').
"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>"
} }
} }
@@ -1486,7 +1486,7 @@ angular.module('umbraco.mocks').
"content_nodeName": "Page Title", "content_nodeName": "Page Title",
"content_otherElements": "Properties", "content_otherElements": "Properties",
"content_parentNotPublished": "This document is published but is not visible because the parent '%0%' is unpublished", "content_parentNotPublished": "This document is published but is not visible because the parent '%0%' is unpublished",
"content_parentNotPublishedAnomaly": "Oops: this document is published but is not in the cache (internal error)", "content_parentNotPublishedAnomaly": "This document is published but is not in the cache",
"content_publish": "Publish", "content_publish": "Publish",
"content_publishStatus": "Publication Status", "content_publishStatus": "Publication Status",
"content_releaseDate": "Publish at", "content_releaseDate": "Publish at",
File diff suppressed because it is too large Load Diff
@@ -69,6 +69,22 @@
}; };
} }
if (!String.prototype.htmlEncode) {
/** htmlEncode extension method for string */
String.prototype.htmlEncode = function () {
//create a in-memory div, set it's inner text(which jQuery automatically encodes)
//then grab the encoded contents back out. The div never exists on the page.
return $('<div/>').text(this).html();
};
}
if (!String.prototype.htmlDecode) {
/** htmlDecode extension method for string */
String.prototype.htmlDecode = function () {
return $('<div/>').html(this).text();
};
}
if (!String.prototype.startsWith) { if (!String.prototype.startsWith) {
/** startsWith extension method for string */ /** startsWith extension method for string */
String.prototype.startsWith = function (str) { String.prototype.startsWith = function (str) {
@@ -281,7 +281,7 @@ Umbraco.Application.Actions = function() {
actionRePublish: function() { actionRePublish: function() {
/// <summary></summary> /// <summary></summary>
UmbClientMgr.openModalWindow('dialogs/republish.aspx?rnd=' + this._utils.generateRandom(), 'Republishing entire site', true, 450, 210); UmbClientMgr.openModalWindow('dialogs/republish.aspx?rnd=' + this._utils.generateRandom(), uiKeys['actions_republish'], true, 450, 210);
}, },
actionAssignDomain: function() { actionAssignDomain: function() {
@@ -389,12 +389,12 @@ Umbraco.Sys.registerNamespace("Umbraco.Controls");
processData: false, processData: false,
success: function (data, textStatus) { success: function (data, textStatus) {
if (textStatus == "error") { if (textStatus == "error") {
alert("Oops. Could not update sort order"); alert("Could not update sort order");
self._getChildNodes(); self._getChildNodes();
} }
}, },
error: function(data) { error: function(data) {
alert("Oops. Could not update sort order. Err: " + data.statusText); alert("Could not update sort order. Err: " + data.statusText);
self._getChildNodes(); self._getChildNodes();
} }
}); });
+22 -10
View File
@@ -37,9 +37,9 @@
Umbraco web.config configuration documentation can be found here: Umbraco web.config configuration documentation can be found here:
http://our.umbraco.org/documentation/using-umbraco/config-files/#webconfig http://our.umbraco.org/documentation/using-umbraco/config-files/#webconfig
--> -->
<add key="umbracoConfigurationStatus" value="7.5.3" /> <add key="umbracoConfigurationStatus" value="7.5.5" />
<add key="umbracoReservedUrls" value="~/config/splashes/booting.aspx,~/install/default.aspx,~/config/splashes/noNodes.aspx,~/Hiccup.aspx,~/signalR,~/VSEnterpriseHelper.axd" /> <add key="umbracoReservedUrls" value="~/config/splashes/booting.aspx,~/install/default.aspx,~/config/splashes/noNodes.aspx,~/Hiccup.aspx,~/signalR,~/VSEnterpriseHelper.axd" />
<add key="umbracoReservedPaths" value="~/umbraco,~/install/,~/communityLogoGenerator,~/adhoc,~/signalR,~/apidocs" /> <add key="umbracoReservedPaths" value="~/umbraco,~/install/,~/communityLogoGenerator,~/adhoc,~/signalR,~/apidocs,~/hangfire" />
<add key="umbracoContentXML" value="~/App_Data/umbraco.config" /> <add key="umbracoContentXML" value="~/App_Data/umbraco.config" />
<add key="umbracoStorageDirectory" value="~/App_Data" /> <add key="umbracoStorageDirectory" value="~/App_Data" />
<add key="umbracoPath" value="~/umbraco" /> <add key="umbracoPath" value="~/umbraco" />
@@ -103,6 +103,7 @@
<add key="AppVeyorWebHookAuthKey" value="it's a secret.. and no, this is not the secret, this key will transformed on the build server" /> <add key="AppVeyorWebHookAuthKey" value="it's a secret.. and no, this is not the secret, this key will transformed on the build server" />
<add key="GoogleOAuthClientID" value="it's a secret.. and no, this is not the secret, this key will transformed on the build server" /> <add key="GoogleOAuthClientID" value="it's a secret.. and no, this is not the secret, this key will transformed on the build server" />
<add key="GoogleOAuthSecret" value="it's a secret.. and no, this is not the secret, this key will transformed on the build server" /> <add key="GoogleOAuthSecret" value="it's a secret.. and no, this is not the secret, this key will transformed on the build server" />
<add key="HangFireEnabled" value="false" />
</appSettings> </appSettings>
<connectionStrings> <connectionStrings>
<remove name="umbracoDbDSN" /> <remove name="umbracoDbDSN" />
@@ -310,7 +311,7 @@
<providers> <providers>
<remove name="MySqlSiteMapProvider" /> <remove name="MySqlSiteMapProvider" />
</providers> </providers>
</siteMap> </siteMap>
</system.web> </system.web>
<!-- ASPNETAJAX --> <!-- ASPNETAJAX -->
<system.web.extensions> <system.web.extensions>
@@ -403,9 +404,9 @@
<!-- Increase the default upload file size limit --> <!-- Increase the default upload file size limit -->
<security> <security>
<requestFiltering> <requestFiltering>
<requestLimits maxAllowedContentLength="52428800" /> <requestLimits maxAllowedContentLength="52428800" />
</requestFiltering> </requestFiltering>
</security> </security>
<rewrite> <rewrite>
@@ -451,11 +452,19 @@
</rule> </rule>
<rule name="UaaSGeneralForum" patternSyntax="Wildcard"> <rule name="UaaSGeneralForum" patternSyntax="Wildcard">
<match url="forum/umbraco-as-a-service/general-questions/*" /> <match url="forum/umbraco-as-a-service/general-questions/*" />
<action type="Redirect" url="forum/umbraco-as-a-service/{R:1}" redirectType="Permanent" appendQueryString="true" /> <action type="Redirect" url="forum/umbraco-cloud/{R:1}" redirectType="Permanent" appendQueryString="true" />
</rule> </rule>
<rule name="UaaSIssuesForum" patternSyntax="Wildcard"> <rule name="UaaSIssuesForum" patternSyntax="Wildcard">
<match url="forum/umbraco-as-a-service/issues/*" /> <match url="forum/umbraco-as-a-service/issues/*" />
<action type="Redirect" url="forum/umbraco-as-a-service/{R:1}" redirectType="Permanent" appendQueryString="true" /> <action type="Redirect" url="forum/umbraco-cloud/{R:1}" redirectType="Permanent" appendQueryString="true" />
</rule>
<rule name="UCloudForum" patternSyntax="Wildcard">
<match url="forum/umbraco-as-a-service/*" />
<action type="Redirect" url="forum/umbraco-cloud/{R:1}" redirectType="Permanent" appendQueryString="true" />
</rule>
<rule name="UCloudDocs" patternSyntax="Wildcard">
<match url="Documentation/Umbraco-as-a-Service/*" />
<action type="Redirect" url="Documentation/Umbraco-Cloud/{R:1}" redirectType="Permanent" appendQueryString="true" />
</rule> </rule>
<rule name="RedirectRepoSearch" patternSyntax="Wildcard"> <rule name="RedirectRepoSearch" patternSyntax="Wildcard">
<match url="umbraco/api/Search/FindProjects/*" /> <match url="umbraco/api/Search/FindProjects/*" />
@@ -554,11 +563,14 @@
<assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31bf3856ad364e35" /> <assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" /> <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly> </dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="AutoMapper" publicKeyToken="be96cd2c38ef1005" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.3.1.0" newVersion="3.3.1.0" />
</dependentAssembly>
<!-- Ensure correct version of HtmlAgilityPack --> <!-- Ensure correct version of HtmlAgilityPack -->
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="HtmlAgilityPack" publicKeyToken="bd319b19eaf3b43a" culture="neutral" /> <assemblyIdentity name="HtmlAgilityPack" publicKeyToken="bd319b19eaf3b43a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.4.9.0" newVersion="1.4.9.0" /> <bindingRedirect oldVersion="0.0.0.0-1.4.9.5" newVersion="1.4.9.5" />
</dependentAssembly> </dependentAssembly>
<dependentAssembly> <dependentAssembly>
@@ -263,7 +263,7 @@ namespace OurUmbraco.Documentation.Busineslogic.GithubSourcePull
case "umbracoforms": case "umbracoforms":
return 0; return 0;
//Umbraco as a Service //Umbraco Cloud
case "getting-started": case "getting-started":
return 0; return 0;
case "set-up": case "set-up":
+18 -19
View File
@@ -34,36 +34,35 @@ namespace OurUmbraco.Events.Library
public static XPathNodeIterator UpcomingEvents() public static XPathNodeIterator UpcomingEvents()
{ {
int contentType = DocumentType.GetByAlias("Event").Id; var contentType = DocumentType.GetByAlias("Event").Id;
string property = "start"; var property = "start";
string sql = string.Format(@"SELECT distinct contentNodeId from cmsPropertyData var sql = string.Format(@"SELECT distinct contentNodeId from cmsPropertyData
inner join cmsPropertyType ON inner join cmsPropertyType ON
cmspropertytype.contenttypeid = {0} and cmspropertytype.contenttypeid = {0} and
cmspropertytype.Alias = '{1}' and cmspropertytype.Alias = '{1}' and
cmspropertytype.id = cmspropertydata.propertytypeid cmspropertytype.id = cmspropertydata.propertytypeid
where dataDate > GETDATE()", contentType, property); where dataDate > GETDATE()", contentType, property);
ISqlHelper sqlhelper = umbraco.BusinessLogic.Application.SqlHelper; using (var sqlhelper = umbraco.BusinessLogic.Application.SqlHelper)
IRecordsReader rr = sqlhelper.ExecuteReader(sql); using (var reader = sqlhelper.ExecuteReader(sql))
XmlDocument doc = new XmlDocument();
XmlNode root = umbraco.xmlHelper.addTextNode(doc, "events", "");
while (rr.Read())
{ {
XmlNode x = (XmlNode)umbraco.content.Instance.XmlContent.GetElementById( rr.GetInt("contentNodeId").ToString() ); var xmlDocument = new XmlDocument();
var root = umbraco.xmlHelper.addTextNode(xmlDocument, "events", "");
if (x != null) while (reader.Read())
{ {
x = doc.ImportNode(x, true); var contentNodeId = reader.GetInt("contentNodeId").ToString();
root.AppendChild(x); var xmlNode = (XmlNode)umbraco.content.Instance.XmlContent.GetElementById(contentNodeId);
}
}
rr.Close();
rr.Dispose();
return root.CreateNavigator().Select("."); if (xmlNode == null) continue;
xmlNode = xmlDocument.ImportNode(xmlNode, true);
root.AppendChild(xmlNode);
}
return root.CreateNavigator().Select(".");
}
} }
} }
} }
+23 -34
View File
@@ -31,20 +31,16 @@ namespace OurUmbraco.Events.Relations
private static int GetRelations(string alias, int parentId) private static int GetRelations(string alias, int parentId)
{ {
ISqlHelper sqlhelper = umbraco.BusinessLogic.Application.SqlHelper; using (var sqlhelper = umbraco.BusinessLogic.Application.SqlHelper)
int result = sqlhelper.ExecuteScalar<int>( {
@" var result = sqlhelper.ExecuteScalar<int>(@"
SELECT count(umbracoRelation.id) SELECT count(umbracoRelation.id)
FROM umbracoRelation FROM umbracoRelation
INNER JOIN umbracoRelationType ON umbracoRelationType.id = umbracoRelation.relType AND umbracoRelationType.alias = @alias INNER JOIN umbracoRelationType ON umbracoRelationType.id = umbracoRelation.relType AND umbracoRelationType.alias = @alias
where parentId = @parent where parentId = @parent", sqlhelper.CreateParameter("@parent", parentId), sqlhelper.CreateParameter("@alias", alias));
"
,
sqlhelper.CreateParameter("@parent", parentId),
sqlhelper.CreateParameter("@alias", alias)
);
return result; return result;
}
} }
public static int GetSignedUp(int eventId) public static int GetSignedUp(int eventId)
@@ -59,32 +55,25 @@ namespace OurUmbraco.Events.Relations
private static List<Relation> GetRelations(string alias, string sort, int parentId, int number) private static List<Relation> GetRelations(string alias, string sort, int parentId, int number)
{ {
List<Relation> retval = new List<Relation>(); var retval = new List<Relation>();
ISqlHelper sqlhelper = umbraco.BusinessLogic.Application.SqlHelper; using (var sqlhelper = umbraco.BusinessLogic.Application.SqlHelper)
IRecordsReader rr = sqlhelper.ExecuteReader(
string.Format(@"
SELECT TOP {0} umbracoRelation.id
FROM umbracoRelation
INNER JOIN umbracoRelationType ON umbracoRelationType.id = umbracoRelation.relType AND umbracoRelationType.alias = @alias
where parentId = @parent
ORDER BY datetime {1}
", number, sort)
,
sqlhelper.CreateParameter("@parent", parentId),
sqlhelper.CreateParameter("@alias", alias)
);
while (rr.Read())
{ {
retval.Add( new Relation( rr.GetInt("id") ) ); var query = string.Format(@"
} SELECT TOP {0} umbracoRelation.id
rr.Close(); FROM umbracoRelation
rr.Dispose(); INNER JOIN umbracoRelationType ON umbracoRelationType.id = umbracoRelation.relType AND umbracoRelationType.alias = @alias
where parentId = @parent
ORDER BY datetime {1}
", number, sort);
return retval; using (var reader = sqlhelper.ExecuteReader(query, sqlhelper.CreateParameter("@parent", parentId), sqlhelper.CreateParameter("@alias", alias)))
{
while (reader.Read())
retval.Add(new Relation(reader.GetInt("id")));
return retval;
}
}
} }
public static List<Relation> GetPeopleWaiting(int eventId, int number) public static List<Relation> GetPeopleWaiting(int eventId, int number)
+1 -2
View File
@@ -15,7 +15,6 @@ using OurUmbraco.Forum.Services;
using umbraco.BusinessLogic; using umbraco.BusinessLogic;
using Umbraco.Core; using Umbraco.Core;
using Umbraco.Core.Models; using Umbraco.Core.Models;
using Umbraco.Web;
namespace OurUmbraco.Forum.AntiSpam namespace OurUmbraco.Forum.AntiSpam
{ {
@@ -39,7 +38,7 @@ namespace OurUmbraco.Forum.AntiSpam
var reputationCurrent = member.GetValue<int>("reputationCurrent"); var reputationCurrent = member.GetValue<int>("reputationCurrent");
member.SetValue("reputationCurrent", reputationCurrent >= 0 ? reputationCurrent - 1 : 0); member.SetValue("reputationCurrent", reputationCurrent >= 0 ? reputationCurrent - 1 : 0);
var memberService = UmbracoContext.Current.Application.Services.MemberService; var memberService = ApplicationContext.Current.Services.MemberService;
memberService.Save(member); memberService.Save(member);
memberService.AssignRole(member.Id, "potentialspam"); memberService.AssignRole(member.Id, "potentialspam");
} }
+2 -2
View File
@@ -483,7 +483,7 @@ namespace OurUmbraco.Forum.Api
if (memberId != 0) if (memberId != 0)
{ {
var member = global::Umbraco.Web.UmbracoContext.Current.Application.Services.MemberService.GetById(memberId); var member = ApplicationContext.Current.Services.MemberService.GetById(memberId);
if (member != null) if (member != null)
{ {
@@ -502,7 +502,7 @@ namespace OurUmbraco.Forum.Api
if (memberId != 0) if (memberId != 0)
{ {
var member = global::Umbraco.Web.UmbracoContext.Current.Application.Services.MemberService.GetById(memberId); var member = ApplicationContext.Current.Services.MemberService.GetById(memberId);
if (member != null) if (member != null)
{ {
@@ -29,7 +29,7 @@ namespace OurUmbraco.Forum.EventHandlers
&& member.Properties.Contains(Constants.Conventions.Member.IsApproved) && member.Properties.Contains(Constants.Conventions.Member.IsApproved)
&& member.IsApproved == false); && member.IsApproved == false);
var memberService = UmbracoContext.Current.Application.Services.MemberService; var memberService = ApplicationContext.Current.Services.MemberService;
foreach (var member in nonApprovedMembers) foreach (var member in nonApprovedMembers)
{ {
// Adds test for member having an Id, if they don't then it's a NEW member, // Adds test for member having an Id, if they don't then it's a NEW member,
@@ -11,6 +11,7 @@ using MarkdownSharp;
using OurUmbraco.Forum.AntiSpam; using OurUmbraco.Forum.AntiSpam;
using OurUmbraco.Forum.Library; using OurUmbraco.Forum.Library;
using OurUmbraco.Forum.Models; using OurUmbraco.Forum.Models;
using Umbraco.Core;
using Umbraco.Core.Models; using Umbraco.Core.Models;
using Umbraco.Web; using Umbraco.Web;
@@ -143,14 +144,14 @@ namespace OurUmbraco.Forum.Extensions
public static bool DetectSpam(this Comment comment) public static bool DetectSpam(this Comment comment)
{ {
var member = UmbracoContext.Current.Application.Services.MemberService.GetById(comment.MemberId); var member = ApplicationContext.Current.Services.MemberService.GetById(comment.MemberId);
comment.IsSpam = SpamChecker.IsSpam(member, comment.Body); comment.IsSpam = SpamChecker.IsSpam(member, comment.Body);
return comment.IsSpam; return comment.IsSpam;
} }
public static bool DetectSpam(this Topic topic) public static bool DetectSpam(this Topic topic)
{ {
var member = UmbracoContext.Current.Application.Services.MemberService.GetById(topic.MemberId); var member = ApplicationContext.Current.Services.MemberService.GetById(topic.MemberId);
topic.IsSpam = SpamChecker.IsSpam(member, string.Format("{0} {1}", topic.Title, topic.Body)); topic.IsSpam = SpamChecker.IsSpam(member, string.Format("{0} {1}", topic.Title, topic.Body));
return topic.IsSpam; return topic.IsSpam;
} }
+2 -1
View File
@@ -11,6 +11,7 @@ using System.Web.Security;
using RestSharp; using RestSharp;
using RestSharp.Deserializers; using RestSharp.Deserializers;
using umbraco.BusinessLogic; using umbraco.BusinessLogic;
using Umbraco.Core;
using Umbraco.Core.Logging; using Umbraco.Core.Logging;
using Umbraco.Core.Models; using Umbraco.Core.Models;
using Umbraco.Web; using Umbraco.Web;
@@ -183,7 +184,7 @@ namespace OurUmbraco.Forum.Library
if (spammer != null && spammer.TotalScore > PotentialSpammerThreshold) if (spammer != null && spammer.TotalScore > PotentialSpammerThreshold)
{ {
var memberService = UmbracoContext.Current.Application.Services.MemberService; var memberService = ApplicationContext.Current.Services.MemberService;
memberService.AssignRole(member.Id, SpamMemberGroupName); memberService.AssignRole(member.Id, SpamMemberGroupName);
spammer.MemberId = member.Id; spammer.MemberId = member.Id;
@@ -9,6 +9,7 @@ using OurUmbraco.Our;
using OurUmbraco.Wiki.Extensions; using OurUmbraco.Wiki.Extensions;
using umbraco; using umbraco;
using umbraco.BusinessLogic; using umbraco.BusinessLogic;
using Umbraco.Core;
using Umbraco.Core.Models; using Umbraco.Core.Models;
using Umbraco.Web; using Umbraco.Web;
@@ -99,8 +100,10 @@ namespace OurUmbraco.MarketPlace.NodeListing
{ {
try try
{ {
return Application.SqlHelper.ExecuteScalar<int>(" select count(*) from projectDownload where projectId = @id;", using (var sqlHelper = Application.SqlHelper)
Application.SqlHelper.CreateParameter("@id", projectId)); {
return sqlHelper.ExecuteScalar<int>("select count(*) from projectDownload where projectId = @id;", sqlHelper.CreateParameter("@id", projectId));
}
} }
catch catch
{ {
@@ -110,13 +113,12 @@ namespace OurUmbraco.MarketPlace.NodeListing
public int GetProjectKarma(int projectId) public int GetProjectKarma(int projectId)
{ {
using (var sqlHelper = Application.SqlHelper)
using (var reader = Application.SqlHelper.ExecuteReader("SELECT SUM([points]) AS Karma FROM powersProject WHERE id = @projectId", using (var reader = sqlHelper.ExecuteReader("SELECT SUM([points]) AS Karma FROM powersProject WHERE id = @projectId", sqlHelper.CreateParameter("@projectId", projectId)))
Application.SqlHelper.CreateParameter("@projectId", projectId))) {
if (reader.Read()) if (reader.Read())
{
return reader.GetInt("Karma"); return reader.GetInt("Karma");
} }
return 0; return 0;
} }
@@ -133,7 +135,7 @@ namespace OurUmbraco.MarketPlace.NodeListing
/// <param name="listingItem"></param> /// <param name="listingItem"></param>
public void SaveOrUpdate(IListingItem listingItem) public void SaveOrUpdate(IListingItem listingItem)
{ {
var contentService = UmbracoContext.Current.Application.Services.ContentService; var contentService = ApplicationContext.Current.Services.ContentService;
//check if this is a new listing or an existing one. //check if this is a new listing or an existing one.
var isUpdate = listingItem.Id != 0; var isUpdate = listingItem.Id != 0;
var content = (isUpdate) var content = (isUpdate)
@@ -260,7 +262,7 @@ namespace OurUmbraco.MarketPlace.NodeListing
var umbracoHelper = new UmbracoHelper(UmbracoContext.Current); var umbracoHelper = new UmbracoHelper(UmbracoContext.Current);
var contribProjects = new List<IPublishedContent>(); var contribProjects = new List<IPublishedContent>();
const string sql = @"SELECT * FROM projectContributors WHERE memberId=@memberId"; const string sql = @"SELECT * FROM projectContributors WHERE memberId=@memberId";
var contribPackageIds = UmbracoContext.Current.Application.DatabaseContext.Database.Fetch<int>(sql, new { memberId }); var contribPackageIds = ApplicationContext.Current.DatabaseContext.Database.Fetch<int>(sql, new { memberId });
foreach (var contribPackageId in contribPackageIds) foreach (var contribPackageId in contribPackageIds)
{ {
@@ -1,8 +1,8 @@
using System;using System.Collections.Generic; using System;
using System.Linq; using System.Collections.Generic;
using OurUmbraco.MarketPlace.Interfaces; using OurUmbraco.MarketPlace.Interfaces;
using OurUmbraco.Our; using umbraco.BusinessLogic;
using Umbraco.Web; using Umbraco.Core;
namespace OurUmbraco.MarketPlace.Providers namespace OurUmbraco.MarketPlace.Providers
{ {
@@ -10,7 +10,7 @@ namespace OurUmbraco.MarketPlace.Providers
{ {
public int GetProjectKarma(int projectId) public int GetProjectKarma(int projectId)
{ {
var db = UmbracoContext.Current.Application.DatabaseContext.Database; var db = ApplicationContext.Current.DatabaseContext.Database;
var result = db.ExecuteScalar<int>("SELECT SUM(points) karma FROM powersProject WHERE id = @projectId", new { projectId = projectId }); var result = db.ExecuteScalar<int>("SELECT SUM(points) karma FROM powersProject WHERE id = @projectId", new { projectId = projectId });
return result; return result;
} }
@@ -19,7 +19,7 @@ namespace OurUmbraco.MarketPlace.Providers
{ {
var karmaList = new List<IKarma>(); var karmaList = new List<IKarma>();
using (var reader = Data.SqlHelper.ExecuteReader("SELECT id as ProjectId, SUM(points) Points FROM powersProject GROUP BY id ORDER BY SUM(points) DESC")) using (var reader = Application.SqlHelper.ExecuteReader("SELECT id as ProjectId, SUM(points) Points FROM powersProject GROUP BY id ORDER BY SUM(points) DESC"))
{ {
while (reader.Read()) while (reader.Read())
{ {
@@ -28,6 +28,7 @@ namespace OurUmbraco.MarketPlace.Providers
ProjectId = reader.GetInt("ProjectId"), ProjectId = reader.GetInt("ProjectId"),
Points = reader.GetInt("Points") Points = reader.GetInt("Points")
}; };
karmaList.Add(karma); karmaList.Add(karma);
} }
} }
@@ -0,0 +1,73 @@
using System;
using System.IO;
using System.Net.Mail;
using System.Web.Hosting;
using OurUmbraco.Forum.Services;
using Umbraco.Core;
using Umbraco.Core.Logging;
using Umbraco.Core.Persistence;
using Umbraco.Web;
using Umbraco.Web.Security;
namespace OurUmbraco.NotificationsCore.Notifications
{
public class MarkAsSolutionReminder
{
public void SendNotification(int topicId, int memberId, NotificationMail notificationMail)
{
try
{
var topicService = new TopicService(ApplicationContext.Current.DatabaseContext);
var topic = topicService.GetById(topicId);
using (ContextHelper.EnsureHttpContext())
{
var memberShipHelper = new MembershipHelper(UmbracoContext.Current);
var member = memberShipHelper.GetById(memberId);
using (var smtpClient = new SmtpClient())
{
var fromMailAddress = new MailAddress(notificationMail.FromMail, notificationMail.FromName);
var subject = string.Format("{0} - '{1}'", notificationMail.Subject, topic.Title);
var domain = notificationMail.Domain;
var body = notificationMail.Body;
body = string.Format(body, topic.Title, "https://" + domain + topic.GetUrl());
if (member.GetPropertyValue<bool>("bugMeNot") == false)
{
const string notificationTestFolder = "~/App_Data/NotificationTest";
if (Directory.Exists(HostingEnvironment.MapPath(notificationTestFolder)) == false)
Directory.CreateDirectory(HostingEnvironment.MapPath(notificationTestFolder));
File.AppendAllText(string.Format("{0}/{1}.txt", HostingEnvironment.MapPath(notificationTestFolder), topic.Id),
string.Format("To: {0}{3}Subject: {1}{3}Body: {3}{2}", member.GetPropertyValue<string>("Email"), subject, body, Environment.NewLine));
using (var mailMessage = new MailMessage())
{
mailMessage.Subject = subject;
mailMessage.Body = body;
mailMessage.To.Add(member.GetPropertyValue<string>("Email"));
mailMessage.From = fromMailAddress;
smtpClient.Send(mailMessage);
}
}
}
}
using (var db = ApplicationContext.Current.DatabaseContext.Database)
{
var sql = new Sql("UPDATE forumTopics SET markAsSolutionReminderSent = 1 WHERE id = @topicId", new {topicId = topic.Id});
var result = db.Execute(sql);
}
}
catch (Exception ex)
{
LogHelper.Error<MarkAsSolutionReminder>("Error processing notification", ex);
throw;
}
}
}
}
@@ -0,0 +1,53 @@
using System;
using System.Net.Mail;
using System.Xml;
using OurUmbraco.NotificationsWeb;
using Umbraco.Core.Logging;
namespace OurUmbraco.NotificationsCore.Notifications
{
public class NotificationMail
{
public string FromName;
public string FromMail;
public string Subject;
public string Domain;
public string Body;
public NotificationMail GetNotificationMail(string notificationType)
{
try
{
var notifications = new XmlDocument();
notifications.Load(Config.ConfigurationFile);
var settings = notifications.SelectSingleNode("//global");
var node = notifications.SelectSingleNode(string.Format("//instant//notification [@name = '{0}']", notificationType));
var details = new XmlDocument();
var cont = details.CreateElement("details");
cont.AppendChild(details.ImportNode(settings, true));
cont.AppendChild(details.ImportNode(node, true));
var detailsChild = details.AppendChild(cont);
var notificationMail = new NotificationMail
{
FromMail = detailsChild.SelectSingleNode("//email").InnerText,
FromName = detailsChild.SelectSingleNode("//name").InnerText,
Subject = detailsChild.SelectSingleNode("//subject").InnerText,
Domain = detailsChild.SelectSingleNode("//domain").InnerText,
Body = detailsChild.SelectSingleNode("//body").InnerText
};
return notificationMail;
}
catch (Exception e)
{
LogHelper.Error<MarkAsSolutionReminder>(string.Format("Couldn't get settings for {0}", notificationType), e);
throw;
}
}
}
}
@@ -0,0 +1,38 @@
using System;
using Hangfire;
using Umbraco.Core;
using Umbraco.Core.Persistence;
namespace OurUmbraco.NotificationsCore.Notifications
{
public class ScheduleHangfireJobs
{
public void MarkAsSolvedReminder()
{
RecurringJob.AddOrUpdate(() => ScheduleTopics(), Cron.HourInterval(12));
}
public void ScheduleTopics()
{
using (var db = ApplicationContext.Current.DatabaseContext.Database)
{
var sql = new Sql("SELECT id, memberId FROM forumTopics WHERE answer = 0 AND (markAsSolutionReminderSent IS NULL OR markAsSolutionReminderSent = 0) AND replies > 0 AND updated < getdate() - 7 AND created > '2016-10-01 00:00:00' AND id NOT IN (SELECT topicId FROM notificationMarkAsSolution) ORDER BY created DESC");
var results = db.Query<ReminderTopic>(sql);
var reminder = new MarkAsSolutionReminder();
var notification = new NotificationMail();
var reminderMail = notification.GetNotificationMail("MarkAsSolutionReminderSingle");
foreach (var reminderTopic in results)
{
var jobId = BackgroundJob.Schedule(() => reminder.SendNotification(reminderTopic.Id, reminderTopic.MemberId, reminderMail), TimeSpan.FromMinutes(10));
}
}
}
}
public class ReminderTopic
{
public int Id { get; set; }
public int MemberId { get; set; }
}
}

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