diff --git a/html/css/Workshop.css b/html/css/Workshop.css
index e20ca35..8c2bbce 100644
--- a/html/css/Workshop.css
+++ b/html/css/Workshop.css
@@ -56,7 +56,7 @@ workshopicon name
color: #DDD;
}
-workshopicon author, workshopicon votes
+workshopicon author, workshopicon votes, workshopicon size
{
position: absolute;
bottom: 0px;
@@ -76,14 +76,20 @@ workshopicon author, workshopicon votes
padding: 3px 6px;
}
+workshopicon size
+{
+ top: 22px;
+ bottom: auto;
+ border-radius: 0 0 0 4px;
+}
-workshopicon author
+workshopicon author, workshopicon size
{
right: 0px;
-webkit-transition: right 100ms ease-out 200ms;
}
-workshopicon:hover author
+workshopicon:hover author, workshopicon:hover size
{
right: -200px;
-webkit-transition: right 100ms ease-in 0ms;
@@ -92,9 +98,15 @@ workshopicon:hover author
workshopicon votes
{
left: 0px;
+ color: #4a4;
-webkit-transition: left 100ms ease-out 200ms;
}
+workshopicon votes.negative
+{
+ color: #a44;
+}
+
workshopicon:hover votes
{
left: -200px;
@@ -106,7 +118,6 @@ workshopicon votes
bottom: 0px;
right: inherit;
border-radius: 0 4px 0 0;
- color: #DDD !important;
}
workshopicon description
@@ -118,10 +129,11 @@ workshopicon description
right: 0;
text-align: justify;
background-color: #777;
- font-size: 12px;
+ font-size: 11px;
padding: 32px 8px;
color: #DDD;
cursor: default;
+
opacity: 0;
-webkit-transition: opacity 100ms ease-in 0ms;
}
@@ -153,6 +165,13 @@ workshopmessage
margin: 64px;
}
+@media screen and (max-height: 800px) {
+ workshopmessage
+ {
+ margin: 16px;
+ }
+}
+
workshopcontainer
{
position: absolute;
@@ -178,7 +197,7 @@ controls
controls control
{
- font-size: 12px;
+ font-size: 11px;
display: inline-block;
background-color: #333;
padding: 2px 4px;
@@ -200,19 +219,149 @@ controls control:hover
background-color: #666;
}
-pagnation
+.ugc_settings_button
+{
+ height: 44px;
+ width: 44px;
+
+ padding: 6px;
+ background: #666;
+ border-radius: 4px;
+ box-sizing: border-box;
+
+ position: absolute;
+ bottom: 4px;
+ right: 4px;
+ cursor: default;
+}
+.ugc_settings_button:hover
+{
+ background: rgb(33, 33, 33);
+}
+
+.ugc_settings
+{
+ width: 100%;
+
+ padding: 10px;
+ background: rgb(33, 33, 33);
+
+ z-index: 128;
+ position: absolute;
+ bottom: 52px;
+ left: 0;
+ box-sizing: border-box;
+
+ visibility: hidden;
+ overflow: hidden;
+}
+.ugc_settings.active
+{
+ visibility: visible;
+}
+
+.ugc_settings span
+{
+ display: block;
+ font-weight: bold;
+}
+.ugc_settings label
+{
+ position: relative;
+ top: -2px;
+}
+
+.ugc_settings a
{
- background-color: #222;
+ font-weight: bold;
+ color: #000;
+ padding: 4px 15px;
+ background: rgb(90, 90, 90);
+ display: block;
+ margin-top: 2px;
+ text-align: center;
+ border-radius: 4px;
+ cursor: default;
+}
+.ugc_settings a:hover
+{
+ colo2r: #ff7;
+ background: rgb(151, 15, 15);
+}
+
+.ugc_settings_cat
+{
+ vertical-align: top;
+ display: inline-block;
+ color: rgb(252, 252, 252);
+ padding: 0px 1%;
+ margin: 0 auto;
+}
+
+.create_preset
+{
+ min-width: 350px;
+}
+
+.preset_content
+{
+ min-width: 500px;
+ margin-bottom: 5px;
+}
+.preset_list
+{
+ background: rgb(58, 58, 58, 255);
+ width: 150px;
+ display: inline-block;
+ max-height: 400px;
+ min-height: 230px;
+ overflow-y: scroll;
+ overflow-x: hidden;
+}
+.preset_list font
+{
+ display: block;
+ padding: 5px;
+ cursor: default;
+}
+.preset_list font:hover
+{
+ background: #ddd;
+}
+.preset_list font.active
+{
+ background: #ccc;
+}
+.preset_data
+{
+ width: 345px;
+ padding-left: 5px;
+ display: inline-block;
+ vertical-align: top;
+ cursor: default;
+}
+
+pagination
+{
+ background-color: rgb(36, 36, 36);
border-radius: 4px;
margin: 0 auto;
padding: 4px 4px;
- white-space: nowrap;
- margin-left: 10%;
- margin-right: 10%;
+ /*white-space: nowrap;*/
+ max-width: 500px;
+ z-index: 64; /* Ensure it is above other elements in case something goes wrong */
}
+@media screen and (max-width: 840px)
+{
+ pagination
+ {
+ margin: 0;
+ margin-right: 48px;
+ }
+}
-pagnation .back, pagnation .next
+pagination .back, pagination .next
{
display: block;
float: left;
@@ -224,49 +373,66 @@ pagnation .back, pagnation .next
background-position: center center;
}
-pagnation .next
+pagination .next
{
float: right;
background-image: url('../img/arrow_right.png');
}
-workshopicon.installed
+pagination .pages
{
- border-color: #676;
+ overflow: hidden;
+ margin-top: 6px;
}
-workshopicon.installed name
+pagination span.pagenum
{
- background-color: #676;
+ font-size: 14px;
}
-
-workshopicon.installed author
+pagination a.page
{
- background-color: #676;
+ opacity: 0.5;
+}
+pagination a.page.active
+{
+ opacity: 1;
}
-workshopicon.installed votes
+workshopicon.installed
+{
+ border-color: #676;
+}
+workshopicon.installed name, workshopicon.installed author, workshopicon.installed votes, workshopicon.installed size
{
- background-color: #676;
+ background: #676;
}
workshopicon.disabled
{
border-color: #766;
}
-
-workshopicon.disabled name
+workshopicon.disabled name, workshopicon.disabled author, workshopicon.disabled votes, workshopicon.disabled size
{
- background-color: #766;
+ background: #766;
}
-workshopicon.disabled author
+workshopicon.invalid
+{
+ border-color: #d22;
+}
+workshopicon.invalid name, workshopicon.invalid author, workshopicon.invalid votes, workshopicon.invalid size
{
- background-color: #766;
+ background: #d22;
+ color: #fff;
}
-workshopicon.disabled votes
+workshopicon.invalid.disabled
+{
+ border-color: #922;
+}
+workshopicon.invalid.disabled name, workshopicon.invalid.disabled author, workshopicon.invalid.disabled votes, workshopicon.invalid.disabled size
{
- background-color: #766;
+ background: #922;
+ color: #766;
}
diff --git a/html/css/creations/Creations.css b/html/css/creations/Creations.css
index a76caa6..576a529 100644
--- a/html/css/creations/Creations.css
+++ b/html/css/creations/Creations.css
@@ -151,7 +151,7 @@ DIV.disabled
border-radius: 4px;
}
-pagnation
+pagination
{
position: absolute;
bottom: 4px;
@@ -309,7 +309,7 @@ workshopmessage
.options UL LI a
{
- //text-shadow: 1px 1px 1px rgba( 0, 0, 0, 0.5 );
+ /*text-shadow: 1px 1px 1px rgba( 0, 0, 0, 0.5 );*/
color: rgba( 255, 255, 255, 0.9 );
}
@@ -319,3 +319,64 @@ workshopmessage
text-shadow: 0px 0px 8px rgba( 255, 255, 255, 1.0 );
}
+/* 1152x864 and lower */
+@media (max-width: 700px) {
+ workshopicon
+ {
+ margin: 0px;
+ margin-right: 5px;
+ margin-bottom: 5px;
+ }
+}
+
+/* 1024x768 and lower */
+@media (max-width: 670px) {
+ .options {
+ width: 150px !important;
+ }
+
+ .clickable {
+ padding-left: 5px !important;
+ }
+
+ DIV.page
+ {
+ left: 150px !important;
+ }
+
+ workshopicon
+ {
+ width: 170px !important;
+ height: 170px !important;
+ margin: 0px;
+ margin-right: 1px;
+ margin-bottom: 1px;
+ }
+}
+
+/* 800x600 and lower */
+@media (max-width: 530px) {
+ .options {
+ width: 130px !important;
+ }
+
+ .clickable {
+ padding-left: 5px !important;
+ }
+
+ DIV.page
+ {
+ left: 130px !important;
+ }
+ .options UL {
+ margin: 0px;
+ }
+ workshopicon
+ {
+ width: 90px !important;
+ height: 90px !important;
+ margin: 0px;
+ margin-right: 0px;
+ margin-bottom: 0px;
+ }
+}
diff --git a/html/css/menu/Menu.css b/html/css/menu/Menu.css
index 945c883..5d18c7b 100644
--- a/html/css/menu/Menu.css
+++ b/html/css/menu/Menu.css
@@ -1,3 +1,4 @@
+
BODY
{
overflow: hidden;
@@ -78,7 +79,7 @@ UL.category LI.icon
position: absolute;
}
-.btn-primary
+.btn-primary, .btn-primary-disabled
{
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#08C), to(#05C));
border: 1px solid #CCC;
@@ -192,7 +193,7 @@ DIV.disabled
border-radius: 4px;
}
-pagnation
+pagination
{
position: absolute;
bottom: 4px;
@@ -259,6 +260,12 @@ loading
box-shadow: 0 0 10px 1px rgba( 0, 0, 0, 0.4 );
cursor: hand;
}
+.news_buttons div.new {
+ background: #f55;
+}
+.news_buttons div.selected.new {
+ background: #fcc;
+}
.news_buttons div.selected {
background: #eee;
}
@@ -271,9 +278,8 @@ loading
box-shadow: 0 0 10px 1px rgba( 0, 0, 0, 0.4 );
height: 256px;
width: 512px;
- position:relative;
+ position: relative;
}
-
.news_item div font {
font-weight: normal;
font-size: small;
@@ -323,4 +329,4 @@ loading
right: 5px;
top: 65px;
}
-}
\ No newline at end of file
+}
diff --git a/html/css/menu/NewGame.css b/html/css/menu/NewGame.css
index 995606b..9497b94 100644
--- a/html/css/menu/NewGame.css
+++ b/html/css/menu/NewGame.css
@@ -39,7 +39,7 @@ UL.category LI.mapicon
position: relative;
width: 128px;
text-align: center;
- font-size: 12px;
+ font-size: 10px;
padding: 6px;
margin: 2px;
cursor: pointer;
@@ -154,7 +154,7 @@ gamesettings select
border: 1px solid #222;
display: none;
cursor: pointer;
- font-size: 12px;
+ font-size: 13px;
-webkit-box-shadow: 2px 2px 8px rgba( 0, 0, 0, 0.5 );
color: #DDD;
}
@@ -166,7 +166,7 @@ gamesettings select
.dropdown .contents div:hover
{
- background-color: #666;
+ background-color:#666;
}
.caret
@@ -190,10 +190,20 @@ gamesettings .control
gamesettings .control LABEL
{
- font-size: 12px;
+ font-size: 11px;
color: #888;
}
+gamesettings .control:not(.control-numeric) LABEL
+{
+ position: relative;
+ top: -2px;
+}
+gamesettings .control-numeric LABEL
+{
+ line-height: 20px;
+}
+
gamesettings .control input[type=text]
{
width: 95%;
diff --git a/html/css/menu/PageOptions.css b/html/css/menu/PageOptions.css
index 115e1ac..a6cd389 100644
--- a/html/css/menu/PageOptions.css
+++ b/html/css/menu/PageOptions.css
@@ -80,6 +80,17 @@ DIV.page DIV.options .search_bar
margin-bottom: 8px;
}
+div.ugc_content
+{
+ position: absolute;
+ left: 320px;
+ top: 16px;
+ bottom: 16px;
+ right: 16px;
+ padding: 16px;
+ padding-top: 0;
+}
+
@media screen and (max-height: 768px) {
DIV.page DIV.options UL.submenu LI
{
@@ -87,6 +98,14 @@ DIV.page DIV.options .search_bar
}
}
+@media screen and (max-width: 1024px)
+{
+ div.ugc_content
+ {
+ left: 200px;
+ }
+}
+
@media screen and (max-width: 1280px)
{
DIV.page DIV.options
@@ -135,7 +154,6 @@ DIV.page DIV.options .search_bar
}
@media screen and (max-height: 420px) {
-
DIV.page DIV.options UL
{
margin: 0px;
@@ -147,9 +165,18 @@ DIV.page DIV.options .search_bar
}
}
-/* Pop up confirmation message when uninstalling ALL addons */
+@media screen and (max-width: 640px) {
+ DIV.page DIV.options
+ {
+ padding-top: 0px;
+ padding-left: 0px;
+ }
+}
+
-body div.modaldialog {
+/* Pop up confirmation message when uninstalling ALL addons, etc */
+
+div.modaldialog {
background: rgba( 0, 0, 0, 0.5 );
width: 100%;
height: 100%;
@@ -160,51 +187,149 @@ body div.modaldialog {
z-index: 9999;
}
-body div.centermessage {
+div.centermessage {
position: fixed;
top: 50%;
left: 50%;
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
- background: #111;
+ background: white;
border-radius: 5px;
- border: 2px solid #333;
+
padding: 20px;
max-width: 500px;
text-align: center;
}
+div.centermessage.left {
+ text-align: left;
+}
-body div.centermessage label {
+div.centermessage span {
color: #DDD;
display: block;
font-size: 20px;
margin-bottom: 20px;
+ cursor: default;
+}
+
+div.centermessage label {
+ position: relative;
+ top: -2px;
+ cursor: default;
}
-body div.centermessage a {
+div.centermessage a
+{
display: block;
color: #DDD;
font-size: 16px;
border-radius: 4px;
background: #333;
padding: 5px 10px;
- /*margin: 0px 25px;*/
+ text-align: center;
+ cursor: default;
}
-body div.centermessage a:hover {
+div.centermessage a:hover
+{
background: #666;
color: #FFF;
}
-body div.centermessage a.confirm {
- background: #633;
- color: #DDD;
+div.centermessage a.big
+{
padding: 10px 20px;
font-size: 32px;
- /*margin: 0px;*/
- margin-bottom: 10px;
+}
+div.centermessage a:not(:last-child)
+{
+ margin-bottom: 5px;
}
-body div.centermessage a.confirm:hover {
- background: #933;
- color: #FFF;
+div.centermessage a.warning {
+ background: #ca1e12;
+ color: white;
+ font-weight: bold;
}
+div.centermessage a.warning:hover {
+ background: #eb2719;
+}
+
+div.centermessage a.create {
+ background: #4CAF50;
+ color: white;
+ font-weight: bold;
+}
+div.centermessage a.create:hover {
+ background: #63bb66;
+}
+
+input.preset_name
+{
+ width: 100%;
+ padding: 3px 5px;
+}
+
+
+div.centermessage .button {
+ display: block;
+ color: black;
+ font-size: 16px;
+ border-radius: 4px;
+ background: #ddd;
+ padding: 5px 10px;
+}
+div.centermessage .button:hover {
+ background: #e3e3e3;
+}
+
+div.centermessage div.button {
+ margin-bottom: 2px;
+ position: relative;
+ background: #ddd;
+}
+div.centermessage .wstitle {
+ text-align: left;
+ width: 100%;
+ display: inline-block;
+ cursor: default;
+ overflow: hidden;
+}
+div.centermessage .wssub {
+ width: 55px;
+ height: 28px;
+ /* background: #4CAF50; */
+ display: inline-block;
+ position: absolute;
+ right: 0px;
+ top: 0px;
+}
+div.centermessage wsbut img {
+ position: relative;
+ top: 2px;
+ right: 2px;
+}
+div.centermessage wsbut
+{
+ background: #b1b1b1;
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 4px;
+}
+div.centermessage wsbut:hover
+{
+ background: #c1c1c1;
+}
+div.centermessage .subbed wsbut
+{
+ background: #4CAF50;
+}
+/*div.centermessage .subbed wsbut:hover
+{
+ background: #55c55a;
+}*/
+div.centermessage .subbed {
+ background: #b2d6b2 !important;
+}
+div.centermessage .subbed:hover {
+ background: #cadeca !important;
+}
+
diff --git a/html/css/menu/Servers.css b/html/css/menu/Servers.css
index 1fd530b..ade16d9 100644
--- a/html/css/menu/Servers.css
+++ b/html/css/menu/Servers.css
@@ -36,7 +36,6 @@
top: 5px;
font-size: 20px;
white-space: nowrap;
- color: #DDD;
}
.gamemode .stats
@@ -551,19 +550,20 @@ SPAN.installgamemode:hover
}
}
-name .unfavbutton {
- background: url( '../../img/favourite.png' );
- margin-right: 8px;
+name .favbutton {
+ background: url( '../../img/notfavourite.png' );
+ margin-right: 4px;
height: 16px;
width: 16px;
display: inline-block;
}
-name .unfavbutton:hover {
- background: url( '../../img/favourite_remove.png' );
+name .favbutton:hover {
+ background: url( '../../img/notfavourite_add.png' );
}
-name .unfavbutton.removed {
- background: url( '../../img/notfavourite.png' );
+name .favbutton.favorited {
+ background: url( '../../img/favourite.png' );
}
-name .unfavbutton.removed:hover {
- background: url( '../../img/notfavourite_add.png' );
+name .favbutton.favorited:hover {
+ background: url( '../../img/favourite_remove.png' );
}
+
diff --git a/html/dupes.html b/html/dupes.html
index 5461e9a..ef1eef2 100644
--- a/html/dupes.html
+++ b/html/dupes.html
@@ -23,7 +23,7 @@
-
+
diff --git a/html/js/creations/dupes.js b/html/js/creations/dupes.js
index 6cd78c9..0c52277 100644
--- a/html/js/creations/dupes.js
+++ b/html/js/creations/dupes.js
@@ -31,6 +31,8 @@ function CDupes( $scope, $timeout, $location )
CreationScope.CategoriesSecondary =
[
+ "followed",
+ "favorite",
"friends",
"mine"
];
@@ -85,3 +87,18 @@ function ShowLocalDupes()
CreationScope.$apply();
}
+
+
+function WindowResized()
+{
+ // dupe is from control.Dupes.js
+ dupe.RefreshDimensions();
+ dupe.UpdatePageNav();
+
+ // Refresh HTML
+ dupe.DigestUpdate = setTimeout( function()
+ {
+ self.DigestUpdate = 0;
+ Scope.Go( 0 );
+ }, 500 )
+}
diff --git a/html/js/creations/saves.js b/html/js/creations/saves.js
index be4c8d3..7bb0c23 100644
--- a/html/js/creations/saves.js
+++ b/html/js/creations/saves.js
@@ -31,6 +31,8 @@ function CSaves( $scope, $timeout, $location )
CreationScope.CategoriesSecondary =
[
+ "followed",
+ "favorite",
"friends",
"mine"
];
@@ -79,3 +81,17 @@ function SetMap( mapname )
CreationScope.MapName = mapname;
UpdateDigest( CreationScope, 10 );
}
+
+function WindowResized()
+{
+ // save is from control.Saves.js
+ save.RefreshDimensions();
+ save.UpdatePageNav();
+
+ // Refresh HTML
+ save.DigestUpdate = setTimeout( function()
+ {
+ self.DigestUpdate = 0;
+ Scope.Go( 0 );
+ }, 500 )
+}
diff --git a/html/js/menu/Subscriptions.js b/html/js/menu/Subscriptions.js
index f429e6d..a853637 100644
--- a/html/js/menu/Subscriptions.js
+++ b/html/js/menu/Subscriptions.js
@@ -1,12 +1,8 @@
function Subscriptions()
{
-
}
-//
-// Initialize
-//
Subscriptions.prototype.Init = function( scope )
{
this.Scope = scope;
@@ -14,9 +10,6 @@ Subscriptions.prototype.Init = function( scope )
this.FilesUGC = {};
}
-//
-// Contains
-//
Subscriptions.prototype.Contains = function( id )
{
id = String( id );
@@ -24,24 +17,22 @@ Subscriptions.prototype.Contains = function( id )
return this.Files[ id ] != null;
}
-//
-// IsEnabled
-//
Subscriptions.prototype.Enabled = function( id )
{
return this.Files[ String( id ) ].mounted;
}
-//
-// SetAllEnabled
-//
-Subscriptions.prototype.SetAllEnabled = function( bBool )
+Subscriptions.prototype.GetInvalidReason = function( id )
{
- bBool = bBool ? "true" : "false";
+ if ( !this.Files[ String( id ) ] ) return;
+ return this.Files[ String( id ) ].invalid_reason;
+}
+Subscriptions.prototype.SetAllEnabled = function( bBool )
+{
for ( k in this.Files )
{
- lua.Run( "steamworks.SetShouldMountAddon( %s, " + bBool + " );", String( k ) );
+ this.SetShouldMountAddon( k, bBool );
}
}
@@ -49,26 +40,37 @@ Subscriptions.prototype.Subscribe = function( wsid )
{
lua.Run( "steamworks.Subscribe( %s );", String( wsid ) );
}
-
Subscriptions.prototype.Unsubscribe = function( wsid )
{
lua.Run( "steamworks.Unsubscribe( %s );", String( wsid ) );
}
-//
-// DeleteAll
-//
+Subscriptions.prototype.ApplyChanges = function()
+{
+ lua.Run( "steamworks.ApplyAddons();" )
+}
+
+Subscriptions.prototype.SetShouldMountAddon = function( wsid, bBool )
+{
+ bBool = bBool ? "true" : "false";
+ lua.Run( "steamworks.SetShouldMountAddon( %s, " + bBool + " );", String( wsid ) );
+}
+
Subscriptions.prototype.UnsubscribeAll = function()
{
for ( k in this.Files )
{
- lua.Run( "steamworks.Unsubscribe( %s );", String( k ) );
+ this.Unsubscribe( k );
}
}
-//
-// Update - called from engine
-//
+// Ew
+Subscriptions.prototype.GetAll = function()
+{
+ return this.Files;
+}
+
+// Called from engine for Subscriptions
Subscriptions.prototype.Update = function( json )
{
this.Files = {};
diff --git a/html/js/menu/TestData.js b/html/js/menu/TestData.js
index c8f4d7f..dba9f98 100644
--- a/html/js/menu/TestData.js
+++ b/html/js/menu/TestData.js
@@ -19,7 +19,7 @@ function DoTestData()
if ( !IN_ENGINE )
{
- setTimeout( function () { DoTestData() }, 10 );
+ setTimeout( function () { DoTestData() }, 100 );
}
function TestUpdateServers( type, id )
diff --git a/html/js/menu/TestWorkshop.js b/html/js/menu/TestWorkshop.js
index 72b6840..689adf7 100644
--- a/html/js/menu/TestWorkshop.js
+++ b/html/js/menu/TestWorkshop.js
@@ -1,5 +1,5 @@
-function WorkshopTestData( type, namespace )
+function WorkshopTestData( type, namespace, perpage )
{
if ( type == 'friends' )
{
@@ -7,11 +7,22 @@ function WorkshopTestData( type, namespace )
return;
}
- namespace.ReceiveIndex( { totalresults: 120, results: [ 1234, 12345, 123456, 1234567, 3, 4, 5, 78, 9, 885, 456, 65, 27, 548, 9, 3455, 345, 677, 876 ] } );
+ var items = { totalresults: perpage * 90, results: [ 1234, 12345, 123 ] };
+
+ for ( var i = items.results.length; i < perpage; i++ )
+ {
+ items.results.push( Math.floor( Math.random() * 100000000 ) )
+ }
+ namespace.ReceiveIndex( items );
+
namespace.ReceiveFileInfo( 1234, { "score": 0.95, "total": 22, "down": 1, "up": 21, "created": 1.33679e+009, "ownername": "garry :D", "description": "The name explains what to do.\n\nUse your crossbow to assasinate Breen and his bodyguards!", "tags": "save", "id": "71502490", "owner": "76561197965224200", "previewsize": 16322, "previewid": "540675364321761226", "updated": 1.33679e+009, "title": "Assasinate Breen.", "disabled": false, "installed": false, "banned": false, "size": 21733, "fileid": "540675364321760831" } )
- namespace.ReceiveFileInfo( 12345, { "score": 0, "total": 0, "down": 0, "up": 0, "created": 1.33679e+009, "description": "The name explains what to do.\n\nUse your crossbow to assasinate Breen and his bodyguards!", "tags": "save", "id": "71502490", "owner": "76561197965224200", "previewsize": 16322, "previewid": "540675364321761226", "updated": 1.33679e+009, "title": "Really long title that sucks cocks", "disabled": false, "installed": false, "banned": false, "size": 21733, "fileid": "540675364321760831" } )
+ namespace.ReceiveFileInfo( 12345, { "score": 0, "total": 0, "down": 0, "up": 0, "created": 1.33679e+009, "description": "The name explains what to do.\n\nUse your crossbow to assasinate Breen and his bodyguards!", "tags": "save", "id": "71502490", "owner": "76561197965224200", "previewsize": 16322, "previewid": "540675364321761226", "updated": 1.33679e+009, "title": "Really long title that is actually really long ok?", "disabled": false, "installed": false, "banned": false, "size": 21733, "fileid": "540675364321760831" } )
+ namespace.ReceiveFileInfo( 123, { "score": 0, "total": 0, "down": 0, "up": 0, "created": 1.33679e+009, "description": "fpei9ufaf9pwiufjawpif", "tags": "save", "id": "71502490", "owner": "76561197965224200", "previewsize": 16322, "previewid": "540675364321761226", "updated": 1.33679e+009, "title": "dfayhfuiofhawofiuawfihawofuawhfoaiuwf", "disabled": false, "installed": true, "banned": false, "size": 21733, "fileid": "540675364321760831" } )
+
+ namespace.ReceiveImage( 1234, "img/creation-play.png" );
+ namespace.ReceiveImage( 12345, "img/localaddon.png" );
- namespace.ReceiveImage( 1234, "img/addonpreview.png" );
- namespace.ReceiveImage( 12345, "../cache/630737834418002174.cache" );
+ subscriptions.Files[ "1234" ] = { mounted: false };
+ subscriptions.Files[ "123" ] = { mounted: true };
}
diff --git a/html/js/menu/WorkshopFiles.js b/html/js/menu/WorkshopFiles.js
index c937b03..dfc2fe5 100644
--- a/html/js/menu/WorkshopFiles.js
+++ b/html/js/menu/WorkshopFiles.js
@@ -55,6 +55,11 @@ WorkshopFiles.prototype.Init = function( namespace, scope, RootScope )
scope.SwitchWithTag( scope.Category, 0, scope.Tagged, scope.MapName )
}
+ this.Scope.HandleSortChange = function()
+ {
+ scope.SwitchWithTag( scope.Category, 0, scope.Tagged, scope.MapName )
+ }
+
var hackyWackyTimer = 0;
this.Scope.HandleOnSearch = function()
{
@@ -94,17 +99,17 @@ WorkshopFiles.prototype.Init = function( namespace, scope, RootScope )
if ( !IN_ENGINE )
{
- setTimeout( function() { WorkshopTestData( scope.Category, self ); }, 0 );
+ setTimeout( function() { WorkshopTestData( scope.Category, self, scope.PerPage ); }, 0 );
}
else
{
// fumble
if ( scope.MapName && scope.Tagged ) {
- gmod.FetchItems( self.NameSpace, scope.Category, scope.Offset, scope.PerPage, scope.Tagged + "," + scope.MapName, scope.SubscriptionSearchText, filter );
+ gmod.FetchItems( self.NameSpace, scope.Category, scope.Offset, scope.PerPage, scope.Tagged + "," + scope.MapName, scope.SubscriptionSearchText, filter, scope.UGCSortMethod );
} else if ( scope.MapName ) {
- gmod.FetchItems( self.NameSpace, scope.Category, scope.Offset, scope.PerPage, scope.MapName, scope.SubscriptionSearchText, filter );
+ gmod.FetchItems( self.NameSpace, scope.Category, scope.Offset, scope.PerPage, scope.MapName, scope.SubscriptionSearchText, filter, scope.UGCSortMethod );
} else {
- gmod.FetchItems( self.NameSpace, scope.Category, scope.Offset, scope.PerPage, scope.Tagged, scope.SubscriptionSearchText, filter );
+ gmod.FetchItems( self.NameSpace, scope.Category, scope.Offset, scope.PerPage, scope.Tagged, scope.SubscriptionSearchText, filter, scope.UGCSortMethod );
}
}
}
@@ -158,8 +163,8 @@ WorkshopFiles.prototype.ReceiveLocal = function( data )
filled : true,
info :
{
- title : data.results[k].name,
- file : data.results[k].file,
+ title : data.results[k].name,
+ file : data.results[k].file,
}
};
@@ -168,7 +173,7 @@ WorkshopFiles.prototype.ReceiveLocal = function( data )
this.UpdatePageNav();
this.Changed();
-};
+}
//
// The index contains the number of saves,
@@ -181,7 +186,7 @@ WorkshopFiles.prototype.ReceiveIndex = function( data )
this.Scope.TotalResults = data.totalresults;
this.Scope.NumResults = data.numresults;
- this.Scope.Files = []
+ this.Scope.Files = [];
for ( k in data.results )
{
@@ -190,6 +195,7 @@ WorkshopFiles.prototype.ReceiveIndex = function( data )
order : k,
id : data.results[k],
filled : false,
+ extra : data.extraresults ? data.extraresults[ k ] : {},
};
this.Scope.Files.push( entry );
@@ -197,7 +203,7 @@ WorkshopFiles.prototype.ReceiveIndex = function( data )
this.UpdatePageNav();
this.Changed();
-};
+}
//
// ReceiveFileInfo
@@ -213,7 +219,7 @@ WorkshopFiles.prototype.ReceiveFileInfo = function( id, data )
this.Changed();
}
-},
+}
//
// ReceiveUserName
@@ -229,7 +235,7 @@ WorkshopFiles.prototype.ReceiveUserName = function( id, data )
this.Changed();
}
-},
+}
//
// ReceiveImage
@@ -243,7 +249,7 @@ WorkshopFiles.prototype.ReceiveImage = function( id, url )
this.Scope.Files[k].background = url;
this.Changed();
}
-},
+}
WorkshopFiles.prototype.Changed = function()
{
@@ -260,13 +266,12 @@ WorkshopFiles.prototype.Changed = function()
self.DigestUpdate = 0;
self.Scope.$digest();
}, 10 )
-
}
WorkshopFiles.prototype.RefreshDimensions = function()
{
- var w = Math.max( 480, $( "workshopcontainer" ).width() );
- var h = Math.max( 320, $( "workshopcontainer" ).height() - 48 );
+ var w = Math.max( 180, $( "workshopcontainer" ).width() );
+ var h = Math.max( 180, $( "workshopcontainer" ).height() - 48 );
var iconswide = Math.floor( w / 180 );
var iconstall = Math.floor( h / 180 );
@@ -283,15 +288,18 @@ WorkshopFiles.prototype.RefreshDimensions = function()
WorkshopFiles.prototype.UpdatePageNav = function()
{
- self.Scope.Page = Math.floor(self.Scope.Offset / self.Scope.PerPage) + 1;
- self.Scope.NumPages = Math.ceil(self.Scope.TotalResults / self.Scope.PerPage);
+ self.Scope.Page = Math.floor( self.Scope.Offset / self.Scope.PerPage ) + 1;
- if ( self.Scope.NumPages > 32 ) self.Scope.NumPages = 32;
+ var maxPages = 32;
+ var realMaxPages = Math.ceil( self.Scope.TotalResults / self.Scope.PerPage )
+ self.Scope.NumPages = Math.min( realMaxPages, maxPages );
- self.Scope.Pages = [];
+ var pageOfPages = Math.floor( ( self.Scope.Page - 1 ) / ( maxPages ) );
+ var pageOffset = pageOfPages * maxPages;
- for ( var i=1; i
0 )
+ {
+ var needsWarning = false;
+ for ( var i = 0; i < file.info.children.length; i++ )
+ {
+ var wsid = file.info.children[ i ];
+ if ( !$scope.IsSubscribedID( wsid ) )
+ {
+ needsWarning = true;
+ break;
+ }
+ }
+
+ if ( needsWarning )
+ {
+ for ( var i = 0; i < file.info.children.length; i++ )
+ {
+ var wsid = file.info.children[ i ];
+ lua.Run( "MenuGetAddonData( %i );", wsid );
+ }
- // Update files if viewing subscribed list?
- };
+ $scope.PopupMessageFiles = file.info.children;
+ $scope.DisplayPopupMessage( "addons.addon_depends", function()
+ {
+ subscriptions.Subscribe( file.id );
+ } );
+ return;
+ }
+ }
+ subscriptions.Subscribe( file.id );
+ }
$scope.Unsubscribe = function( file )
{
subscriptions.Unsubscribe( file.id );
-
- // Update files if viewing subscribed list?
- };
-
+ }
$scope.UninstallAllSubscribed = function()
{
subscriptions.UnsubscribeAll();
- lua.Run( "steamworks.ApplyAddons();" );
+ subscriptions.ApplyChanges();
}
-
$scope.IsSubscribed = function( file )
{
return subscriptions.Contains( file.id );
- };
+ }
+ $scope.IsSubscribedID = function( fileID )
+ {
+ return subscriptions.Contains( fileID );
+ }
$scope.DisableAllSubscribed = function()
{
subscriptions.SetAllEnabled( false );
- lua.Run( "steamworks.ApplyAddons();" );
+ subscriptions.ApplyChanges();
}
-
$scope.EnableAllSubscribed = function()
{
subscriptions.SetAllEnabled( true );
- lua.Run( "steamworks.ApplyAddons();" );
+ subscriptions.ApplyChanges();
}
-
$scope.IsEnabled = function( file )
{
return subscriptions.Enabled( file.id );
- };
-
+ }
$scope.Disable = function( file )
{
- lua.Run( "steamworks.SetShouldMountAddon( %s, false );", String( file.id ) )
- lua.Run( "steamworks.ApplyAddons();" )
- };
-
+ subscriptions.SetShouldMountAddon( String( file.id ), false );
+ subscriptions.ApplyChanges();
+ }
$scope.Enable = function( file )
{
- lua.Run( "steamworks.SetShouldMountAddon( %s, true );", String( file.id ) )
- lua.Run( "steamworks.ApplyAddons();" )
- };
+ subscriptions.SetShouldMountAddon( String( file.id ), true );
+ subscriptions.ApplyChanges();
+ }
$scope.DisplayPopupMessage = function( txt, func )
{
@@ -106,11 +155,17 @@ function ControllerAddons( $scope, $element, $rootScope, $location )
$scope.ClosePopupMessage = function( txt, func )
{
$scope.PopupMessageDisplayed = false;
+ $scope.PopupMessageFiles = [];
+
+ $scope.CreatePresetOpen = false;
+ $scope.LoadPresetMenuOpen = false;
+ $scope.SelectedPreset = undefined;
}
$scope.ExecutePopupFunction = function()
{
- $scope.PopupMessageDisplayed = false;
- if ( $scope.PopupMessageDisplayedFunc ) {
+ $scope.ClosePopupMessage();
+ if ( $scope.PopupMessageDisplayedFunc )
+ {
$scope.PopupMessageDisplayedFunc()
$scope.PopupMessageDisplayedFunc = null;
}
@@ -120,45 +175,211 @@ function ControllerAddons( $scope, $element, $rootScope, $location )
{
for ( var k in $scope.SelectedItems ) $scope.SelectedItems[ k ] = false;
}
+ $scope.SelectAllPage = function()
+ {
+ for ( var k in $scope.Files ) $scope.SelectedItems[ $scope.Files[ k ].id ] = true;
+ }
+ $scope.SelectAll = function()
+ {
+ for ( var k in subscriptions.GetAll() ) $scope.SelectedItems[ k ] = true;
+ }
$scope.EnableAllSelected = function()
{
- for ( var k in $scope.SelectedItems ) {
+ for ( var k in $scope.SelectedItems )
+ {
if ( !$scope.SelectedItems[ k ] ) continue;
- lua.Run( "steamworks.SetShouldMountAddon( %s, true );", String( k ) );
+
+ subscriptions.SetShouldMountAddon( k, true );
$scope.SelectedItems[ k ] = false;
}
- lua.Run( "steamworks.ApplyAddons();" )
+ subscriptions.ApplyChanges();
}
$scope.DisableAllSelected = function()
{
- for ( var k in $scope.SelectedItems ) {
+ for ( var k in $scope.SelectedItems )
+ {
if ( !$scope.SelectedItems[ k ] ) continue;
- lua.Run( "steamworks.SetShouldMountAddon( %s, false );", String( k ) );
+
+ subscriptions.SetShouldMountAddon( k, false );
$scope.SelectedItems[ k ] = false;
}
- lua.Run( "steamworks.ApplyAddons();" )
+ subscriptions.ApplyChanges();
}
$scope.UninstallAllSelected = function()
{
- for ( var k in $scope.SelectedItems ) {
+ for ( var k in $scope.SelectedItems )
+ {
if ( !$scope.SelectedItems[ k ] ) continue;
- lua.Run( "steamworks.Unsubscribe( %s );", String( k ) );
+
+ subscriptions.Unsubscribe( k );
$scope.SelectedItems[ k ] = false;
}
- lua.Run( "steamworks.ApplyAddons();" )
+ subscriptions.ApplyChanges();
}
$scope.IsAnySelected = function()
{
- var count = 0;
- for ( var k in $scope.SelectedItems ) if ( $scope.SelectedItems[ k ] ) count++;
- return count > 0;
+ for ( var k in $scope.SelectedItems )
+ {
+ if ( $scope.SelectedItems[ k ] ) return true;
+ }
+ return false;
+ }
+
+ $scope.ToggleSettings = function()
+ {
+ $scope.UGCSettingsOpen = !$scope.UGCSettingsOpen;
+ }
+
+ $scope.OpenCreatePresetMenu = function()
+ {
+ // Reset to defaults..
+ $scope.CreatePresetSaveEnabled = true;
+ $scope.CreatePresetSaveDisabled = true;
+ $scope.CreatePresetNew = "disable";
+ $scope.CreatePresetName = "";
+
+ $scope.CreatePresetOpen = true;
+ }
+ $scope.CreateNewPreset = function()
+ {
+ var newPreset = {
+ enabled: [], disabled: [],
+ name: $scope.CreatePresetName,
+ newAction: $scope.CreatePresetNew
+ }
+
+ var files = subscriptions.GetAll();
+ for ( var id in files )
+ {
+ var enabled = files[ id ].mounted;
+
+ if ( enabled && $scope.CreatePresetSaveEnabled ) newPreset.enabled.push( id );
+ if ( !enabled && $scope.CreatePresetSaveDisabled ) newPreset.disabled.push( id );
+ }
+
+ lua.Run( "CreateNewAddonPreset( %s )", JSON.stringify( newPreset ) );
+
+ $scope.CreatePresetOpen = false;
+ }
+
+ $scope.OpenLoadPresetMenu = function()
+ {
+ lua.Run( "ListAddonPresets()" );
+ $scope.LoadPresetMenuOpen = true;
+ $scope.LoadPresetResub = false;
+ }
+ $scope.SelectPreset = function( preset, newAction )
+ {
+ $scope.SelectedPreset = preset;
+ $scope.CreatePresetNew = newAction;
+ }
+ $scope.DeletePreset = function( preset )
+ {
+ lua.Run( "DeleteAddonPreset( %s )", preset );
+ $scope.SelectedPreset = undefined;
+ }
+ $scope.LoadSelectedPreset = function()
+ {
+ var preset = $scope.PresetList[ $scope.SelectedPreset ];
+ var newAct = $scope.CreatePresetNew;
+
+ // Resub to missing stuff
+ if ( $scope.LoadPresetResub )
+ {
+ for ( var k in preset.disabled )
+ {
+ var id = preset.disabled[ k ];
+ if ( !subscriptions.Contains( id ) ) subscriptions.Subscribe( id );
+ }
+ for ( var k in preset.enabled )
+ {
+ var id = preset.enabled[ k ];
+ if ( !subscriptions.Contains( id ) ) subscriptions.Subscribe( id );
+ }
+ subscriptions.ApplyChanges();
+ }
+
+ var IDsDone = {};
+ for ( var k in preset.disabled )
+ {
+ var id = preset.disabled[ k ];
+ subscriptions.SetShouldMountAddon( id, false );
+ IDsDone[ id ] = true;
+ }
+ for ( var k in preset.enabled )
+ {
+ var id = preset.enabled[ k ];
+ subscriptions.SetShouldMountAddon( id, true );
+ IDsDone[ id ] = true;
+ }
+
+ if ( newAct != "" )
+ {
+ var files = subscriptions.GetAll();
+ for ( var id in files )
+ {
+ if ( !IDsDone[ id ] )
+ {
+ subscriptions.SetShouldMountAddon( id, newAct == "enable" );
+ }
+ }
+ }
+
+ subscriptions.ApplyChanges();
+ $scope.LoadPresetMenuOpen = false;
+ $scope.SelectedPreset = undefined;
}
+
+ $scope.GetAddonClasses = function( file )
+ {
+ var classes = [];
+ if ( $scope.IsSubscribed( file ) )
+ {
+ classes.push( $scope.IsEnabled( file ) ? "installed" : "disabled" );
+ if ( subscriptions.GetInvalidReason( file.id ) ) classes.push( "invalid" );
+ }
+ return classes.join( " " );
+ }
+
+ $scope.GetAddonDescription = function( file )
+ {
+ var invalid = subscriptions.GetInvalidReason( file.id )
+ if ( invalid ) return invalid;
+
+ if ( !file.info ) return "ERROR?";
+
+ return file.info.description
+ }
+
+ $scope.GetNiceSize = function( size )
+ {
+ if ( !size || size <= 0 ) return "0 Bytes"
+ if ( size < 1000 ) return size + " Bytes"
+ if ( size < 1000 * 1000 ) return Math.round( size / 1000, 2 ) + " KB"
+ if ( size < 1000 * 1000 * 1000 ) return Math.round( size / ( 1000 * 1000 ), 2 ) + " MB"
+
+ return Math.round( size / ( 1000 * 1000 * 1000 ), 2 ) + " GB"
+ }
+}
+
+function ReceivedChildAddonInfo( info )
+{
+ var elem = document.getElementById( "wsid" + info.id )
+ elem.innerText = info.title
+}
+
+function OnReceivePresetList( list )
+{
+ if ( !Scope ) return;
+
+ Scope.PresetList = list;
+ UpdateDigest( Scope, 50 );
}
function UpdateAddonDisabledState( noaddons, noworkshop )
{
- if ( Scope ) {
- Scope.Disabled = noworkshop;
- UpdateDigest( Scope, 50 );
- }
+ if ( !Scope ) return;
+
+ Scope.Disabled = noworkshop;
+ UpdateDigest( Scope, 50 );
}
diff --git a/html/js/menu/control.Demos.js b/html/js/menu/control.Demos.js
index 8f456dc..f00f9c6 100644
--- a/html/js/menu/control.Demos.js
+++ b/html/js/menu/control.Demos.js
@@ -24,6 +24,8 @@ function ControllerDemos( $scope, $element, $rootScope, $location )
$scope.CategoriesSecondary =
[
+ "followed",
+ "favorite",
"friends",
"mine",
];
diff --git a/html/js/menu/control.Dupes.js b/html/js/menu/control.Dupes.js
index 493387d..d71c905 100644
--- a/html/js/menu/control.Dupes.js
+++ b/html/js/menu/control.Dupes.js
@@ -24,6 +24,8 @@ function ControllerDupes($scope, $rootScope, $location, $timeout, $routeParams)
$scope.CategoriesSecondary =
[
+ "followed",
+ "favorite",
"friends",
"mine"
];
diff --git a/html/js/menu/control.Main.js b/html/js/menu/control.Main.js
index a4245ee..c9b9920 100644
--- a/html/js/menu/control.Main.js
+++ b/html/js/menu/control.Main.js
@@ -1,3 +1,4 @@
+
var scope = null
var rootScope = null;
@@ -10,25 +11,31 @@ function ControllerMain( $scope, $element, $rootScope )
$scope.NewsList = [];
$scope.CurrentNewsItem = null;
+ $scope.HideNews = false;
+ $scope.AnyNewNewsItems = false;
if ( !IN_ENGINE )
{
$rootScope.NewsList = [
- { HeaderImage: 'example.jpg', Title: 'December 2018 Hotfix', SummaryHtml: 'A security hotfix', Url: 'https://google.com/?q=1' },
- { Title: 'Post without an image', SummaryHtml: 'They are very hard to make', Url: 'https://google.com/?q=2' },
- { HeaderImage: 'example.jpg', Title: 'December 2018 is a very long Security Hotfix that means we need to handle this', SummaryHtml: 'A security hotfix', Url: 'https://google.com/?q=3' },
- { HeaderImage: 'example.jpg', Title: 'December 2018 Hotfix', SummaryHtml: 'A very long security hotfix example indeed like it is so long that i dont know how I will fit this stuff in the box', Url: 'https://google.com/?q=4' },
+ { HeaderImage: 'img/whatsnew.png', Title: 'December 2018 Hotfix', SummaryHtml: 'A security hotfix', Url: 'https://google.com/?q=1', Date: Date.now() },
+ { HeaderImage: 'img/whatsnew.png', Title: 'December 2018 Coldfix', SummaryHtml: 'A very long security hotfix example indeed like it is so long that i dont know how I will fit this stuff in the box', Url: 'https://google.com/?q=4' , Date: 0 },
+ { Title: 'Post without an image', SummaryHtml: 'They are very hard to make', Url: 'https://google.com/?q=2', Date: Date.now() - 604800000 - 10000 },
+ { HeaderImage: 'img/whatsnew.png', Title: 'December 2018 is a very long Security Hotfix that means we need to handle this', SummaryHtml: 'A security hotfix', Url: 'https://google.com/?q=3', Date: Date.now() - 604800000 + 10000 },
]
}
- if ( $rootScope.NewsList )
+ $scope.NewsItemClass = function( NewsItem )
{
- $scope.NewsList = $rootScope.NewsList;
- $scope.CurrentNewsItem = $scope.NewsList[ 0 ];
+ // If newer than a 3.5 days, force show news
+ if ( Date.parse( NewsItem.Date ) > Date.now() - 302400000 )
+ {
+ $scope.AnyNewNewsItems = true; // Kind of a hack to do this here
+ $scope.SetHideNewsList( false );
+ return "new";
+ }
+ return "";
}
- lua.Run( "LoadNewsList()" );
-
$scope.NewsItemBackground = function( url )
{
return "background-image: url( " + url + " )";
@@ -36,6 +43,8 @@ function ControllerMain( $scope, $element, $rootScope )
$scope.SelectItem = function( item )
{
+ $scope.SetHideNewsList( false, true );
+
$scope.CurrentNewsItem = item;
}
@@ -43,16 +52,44 @@ function ControllerMain( $scope, $element, $rootScope )
{
lua.Run( "gui.OpenURL( '" + url + "' )" );
}
+
+ $scope.SetHideNewsList = function( bHide, bSave )
+ {
+ $scope.HideNews = bHide;
+ $rootScope.HideNews = $scope.HideNews;
+
+ if ( bSave ) lua.Run( "SaveHideNews( '" + $scope.HideNews + "' )" );
+ }
+ $scope.ToggleNewsList = function()
+ {
+ $scope.SetHideNewsList( !$scope.HideNews, true );
+
+ //$scope.CurrentNewsItem = undefined;
+ }
+
+ // Load it all up
+ if ( $rootScope.NewsList )
+ {
+ $scope.NewsList = $rootScope.NewsList;
+ $scope.SetHideNewsList( $rootScope.HideNews );
+ $scope.CurrentNewsItem = $scope.NewsList[ 0 ];
+ }
+ else
+ {
+ lua.Run( "LoadNewsList()" );
+ }
}
-function UpdateNewsList( newslist )
+function UpdateNewsList( newslist, hide )
{
+ scope.SetHideNewsList( hide );
scope.NewsList = newslist;
- scope.CurrentNewsItem = newslist[ 0 ];
+ scope.CurrentNewsItem = /*scope.HideNews ? undefined :*/ newslist[ 0 ];
if ( rootScope )
{
+ rootScope.HideNews = hide
rootScope.NewsList = newslist;
UpdateDigest( rootScope, 50 );
}
-}
\ No newline at end of file
+}
diff --git a/html/js/menu/control.Menu.js b/html/js/menu/control.Menu.js
index 95dd2cf..5a71953 100644
--- a/html/js/menu/control.Menu.js
+++ b/html/js/menu/control.Menu.js
@@ -29,19 +29,19 @@ function MenuController( $scope, $rootScope )
$( '.gamemode_list' ).toggle();
}
- $scope.ToggleLanguage = function ()
+ $scope.ToggleLanguage = function()
{
$( '.popup:not(.language_list)' ).hide();
$( '.language_list' ).toggle();
}
- $scope.ToggleGames = function ()
+ $scope.ToggleGames = function()
{
$( '.popup:not(.games_list)' ).hide();
$( '.games_list' ).toggle();
}
- $scope.TogglePopup = function ( name )
+ $scope.TogglePopup = function( name )
{
$( '.popup:not('+name+')' ).hide();
$( name ).toggle();
@@ -56,7 +56,7 @@ function MenuController( $scope, $rootScope )
$( '.gamemode_list' ).hide();
}
- $scope.SelectLanguage = function ( lang )
+ $scope.SelectLanguage = function( lang )
{
$rootScope.Language = lang;
lua.Run( "RunConsoleCommand( \"gmod_language\", \"" + lang + "\" )" );
@@ -64,7 +64,7 @@ function MenuController( $scope, $rootScope )
$( '.language_list' ).hide();
}
- $scope.MenuOption = function ( btn, v )
+ $scope.MenuOption = function( btn, v )
{
lua.Run( "RunGameUICommand( '" + v + "' )" )
}
@@ -104,47 +104,44 @@ function MenuController( $scope, $rootScope )
lua.Run( "gui.HideGameUI()" );
}
- $scope.AddServerToFavorites = function()
+ $scope.ToggleServerFavorites = function( bAdd )
{
- lua.Run( "serverlist.AddCurrentServerToFavorites()" );
+ lua.Run( "serverlist.AddCurrentServerToFavorites( " + bAdd + " )" );
}
- $scope.Disconnect = function ()
+ $scope.Disconnect = function()
{
lua.Run( "RunConsoleCommand( 'disconnect' )" );
}
- $scope.OpenWorkshopFile = function ( id )
+ $scope.OpenWorkshopFile = function( id )
{
if ( !id ) return;
lua.Run( "steamworks.ViewFile( %s )", String( id ) );
}
- $scope.OpenFolder = function ( foldername )
+ $scope.OpenFolder = function( foldername )
{
lua.Run( "OpenFolder( %s )", String( foldername ) );
}
- $scope.OpenWorkshop = function ()
+ $scope.OpenWorkshop = function()
{
lua.Run( "steamworks.OpenWorkshop()" );
}
$scope.ShowNews = function()
{
- if ( gScope.Branch == "dev" ) return lua.Run( "gui.OpenURL( 'http://wiki.garrysmod.com/changelist/' )" );
- if ( gScope.Branch == "prerelease" ) return lua.Run( "gui.OpenURL( 'http://wiki.garrysmod.com/changelist/prerelease/' )" );
+ if ( gScope.Branch != "unknown" ) return lua.Run( "gui.OpenURL( 'https://commits.facepunch.com/r/garrysmod' )" );
lua.Run( "gui.OpenURL( 'http://gmod.facepunch.com/changes/' )" );
}
- // Background
- ChangeBackground();
-
// InGame
$scope.InGame = false;
$scope.ShowFavButton = false;
+ $scope.IsCurrentServerFav = false;
// Kinect options
$scope.kinect =
@@ -182,23 +179,19 @@ function MenuController( $scope, $rootScope )
} );
}
-function SetInGame( bool )
+function SetInGame( bInGame )
{
- gScope.InGame = bool;
+ gScope.InGame = bInGame;
UpdateDigest( gScope, 50 );
}
-function SetShowFavButton( bool )
+function SetShowFavButton( bShow, bFav )
{
- gScope.ShowFavButton = bool;
+ gScope.ShowFavButton = bShow;
+ gScope.IsCurrentServerFav = bFav;
UpdateDigest( gScope, 50 );
}
-function ChangeBackground()
-{
- setTimeout( function(){ ChangeBackground() }, 12000 )
-}
-
function UpdateGamemodes( gm )
{
gScope.Gamemodes = [];
@@ -315,9 +308,9 @@ function UpdateVersion( version, branch )
//
// Setup sounds..
//
-$(document).on( "mouseenter", ".options a", function () { lua.PlaySound( "garrysmod/ui_hover.wav" ); } );
-$(document).on( "click", ".options a", function () { lua.PlaySound( "garrysmod/ui_click.wav" ); } );
-$(document).on( "mouseenter", ".noisy", function () { lua.PlaySound( "garrysmod/ui_hover.wav" ); } );
-$(document).on( "click", ".noisy", function () { lua.PlaySound( "garrysmod/ui_click.wav" ); } );
-$(document).on( "mouseenter", ".ui_sound_return", function () { lua.PlaySound( "garrysmod/ui_hover.wav" ); } );
-$(document).on( "click", ".ui_sound_return", function () { lua.PlaySound( "garrysmod/ui_return.wav" ); } );
\ No newline at end of file
+$(document).on( "mouseenter", ".options a", function() { lua.PlaySound( "garrysmod/ui_hover.wav" ); } );
+$(document).on( "click", ".options a", function() { lua.PlaySound( "garrysmod/ui_click.wav" ); } );
+$(document).on( "mouseenter", ".noisy", function() { lua.PlaySound( "garrysmod/ui_hover.wav" ); } );
+$(document).on( "click", ".noisy", function() { lua.PlaySound( "garrysmod/ui_click.wav" ); } );
+$(document).on( "mouseenter", ".ui_sound_return", function() { lua.PlaySound( "garrysmod/ui_hover.wav" ); } );
+$(document).on( "click", ".ui_sound_return", function() { lua.PlaySound( "garrysmod/ui_return.wav" ); } );
diff --git a/html/js/menu/control.Saves.js b/html/js/menu/control.Saves.js
index 2fe385a..67f03a3 100644
--- a/html/js/menu/control.Saves.js
+++ b/html/js/menu/control.Saves.js
@@ -24,6 +24,8 @@ function ControllerSaves($scope, $rootScope, $location, $timeout, $routeParams)
$scope.CategoriesSecondary =
[
+ "followed",
+ "favorite",
"friends",
"mine"
];
diff --git a/html/js/menu/control.Servers.js b/html/js/menu/control.Servers.js
index 7a2cd8a..782902c 100644
--- a/html/js/menu/control.Servers.js
+++ b/html/js/menu/control.Servers.js
@@ -13,15 +13,13 @@ function ControllerServers( $scope, $element, $rootScope, $location )
if ( !Scope.CurrentGamemode )
Scope.CurrentGamemode = null;
- if ( !Scope.Refreshing )
- Scope.Refreshing = {}
-
+ if ( !Scope.Refreshing ) Scope.Refreshing = {}
$scope.DoStopRefresh = function()
{
lua.Run( "DoStopServers( '" + Scope.ServerType + "' )" );
}
- $scope.$on( "$destroy", function()
+ $scope.$on( "$destroy", function()
{
$scope.DoStopRefresh();
} );
@@ -35,8 +33,8 @@ function ControllerServers( $scope, $element, $rootScope, $location )
//
// Clear out all of the servers
//
- ServerTypes[Scope.ServerType].gamemodes = {};
- ServerTypes[Scope.ServerType].list.length = 0;
+ ServerTypes[ Scope.ServerType ].gamemodes = {};
+ ServerTypes[ Scope.ServerType ].list.length = 0;
if ( !IN_ENGINE )
TestUpdateServers( Scope.ServerType, RequestNum[ Scope.ServerType ] );
@@ -46,7 +44,7 @@ function ControllerServers( $scope, $element, $rootScope, $location )
//
lua.Run( "GetServers( '" + Scope.ServerType + "', '" + RequestNum[ Scope.ServerType ] + "' )" );
- Scope.Refreshing[ Scope.ServerType] = "true";
+ Scope.Refreshing[ Scope.ServerType ] = "true";
UpdateDigest( Scope, 50 );
}
@@ -132,6 +130,9 @@ function ControllerServers( $scope, $element, $rootScope, $location )
$scope.JoinServer = function ( srv )
{
+ // It's full, why even bother...
+ // if ( srv.players >= srv.maxplayers ) return;
+
if ( srv.password )
lua.Run( "RunConsoleCommand( \"password\", \"" + srv.password + "\" )" )
@@ -234,7 +235,7 @@ function GetGamemode( name, type )
return ServerTypes[type].gamemodes[name];
}
-function AddServer( type, id, ping, name, desc, map, players, maxplayers, botplayers, pass, lastplayed, address, gamemode, workshopid, isAnon, steamID )
+function AddServer( type, id, ping, name, desc, map, players, maxplayers, botplayers, pass, lastplayed, address, gamemode, workshopid, isAnon, steamID, isFav )
{
if ( id != RequestNum[ type ] ) return;
@@ -258,17 +259,14 @@ function AddServer( type, id, ping, name, desc, map, players, maxplayers, botpla
workshopid: workshopid,
isAnon: isAnon,
steamID: steamID,
- favorite: false // This needs to be set properly
+ favorite: isFav == "true"
};
- if ( type == "favorite" ) {
- data.favorite = true; // This needs to be set properly
- }
-
data.hasmap = DoWeHaveMap( data.map );
data.recommended = 40;
- if(data.ping >= 60) data.recommended = data.ping;
+ if ( data.ping >= 60 ) data.recommended = data.ping;
+
if ( data.players == 0 ) data.recommended += 75; // Server is empty
if ( data.players >= data.maxplayers ) data.recommended += 100; // Server is full, can't join it
if ( data.pass ) data.recommended += 300; // Password protected, can't join it
@@ -371,10 +369,11 @@ function UpdateGamemodeInfo( server )
//
// Use the most common workshop id
//
- //if ( server.workshopid != "" )
+ if ( server.workshopid != "" )
{
if ( !gi.wsid ) gi.wsid = {}
if ( !gi.wsid[ server.workshopid ] ) { gi.wsid[ server.workshopid ] = 1; } else { gi.wsid[ server.workshopid ]++; }
gi.workshopid = GetHighestKey( gi.wsid );
}
}
+
diff --git a/html/js/menu/menuApp.js b/html/js/menu/menuApp.js
index dc935d1..c64362f 100644
--- a/html/js/menu/menuApp.js
+++ b/html/js/menu/menuApp.js
@@ -56,4 +56,4 @@ App.filter( 'startFrom', function ()
start = +start; //parse to int
return input.slice( start );
}
-} );
\ No newline at end of file
+} );
diff --git a/html/js/svc.Tranny.js b/html/js/svc.Tranny.js
index f7eb872..7906429 100644
--- a/html/js/svc.Tranny.js
+++ b/html/js/svc.Tranny.js
@@ -11,15 +11,11 @@ angular.module( 'tranny', [] )
{
if ( IN_ENGINE )
{
- var outStr_old = language.Update( strName, function( outStr )
+ language.Update( strName, function( outStr )
{
$(element).html( outStr );
$(element).attr( "placeholder", outStr );
} );
-
- // Compatibility with Awesomium
- $(element).html( outStr_old );
- $(element).attr( "placeholder", outStr_old );
}
else
{
diff --git a/html/loading.css b/html/loading.css
index 189e3e6..255f330 100644
--- a/html/loading.css
+++ b/html/loading.css
@@ -1,8 +1,13 @@
+
BODY
{
background: #fff url( 'img/bg.jpg' );
-webkit-background-size: 100% 100%;
overflow: hidden;
+ margin: 0px;
+
+ background-position: center;
+ background-size: cover;
}
#container
@@ -23,7 +28,7 @@ BODY
border-radius: 3px;
text-align: left;
padding: 1px;
- background-color: rgba( 0, 0, 0, 0.6);
+ background-color: rgba( 0, 0, 0, 0.6 );
float: right;
}
@@ -32,7 +37,7 @@ BODY
-webkit-box-reflect: below -1px -webkit-gradient(linear, left top, left bottom, from(transparent), from(rgba(0, 0, 0, 0.0)), to(rgba(255, 255, 255, 0.5)));
}
-.progressbar .inner
+.progressbar .inner
{
border-radius: 2px;
background-color: rgba( 88, 0, 0, 1.0);
@@ -57,44 +62,103 @@ BODY
white-space: nowrap;
}
-
-@-webkit-keyframes walk
+@-webkit-keyframes walk
{
- 0%
- {
- -webkit-transform: rotateZ(0deg);
- }
+ 0%
+ {
+ -webkit-transform: rotateZ(0deg);
+ }
25%
{
-webkit-transform: rotateZ(30deg);
}
- 50%
- {
- -webkit-transform: rotateZ(0deg);
- }
+ 50%
+ {
+ -webkit-transform: rotateZ(180deg);
+ }
- 75%
+ 75%
{
-webkit-transform: rotateZ(-30deg);
}
- 100%
- {
- -webkit-transform: rotateZ(0deg);
- }
+ 100%
+ {
+ -webkit-transform: rotateZ(360deg);
+ }
}
.walk
{
-webkit-animation-name: walk;
- -webkit-animation-duration: 2.0s;
+ -webkit-animation-duration: 10.0s;
-webkit-animation-iteration-count: infinite;
-webkit-animation-timing-function: linear;
-webkit-perspective: 6000px;
- width: 48px;
- height: 48px;
+ text-align: center;
+ background-color: #fe7;
+ width: 24px;
+ height: 24px;
+ color: #999;
+ font-size: 16px;
+ font-family: arial;
+ font-weight: bold;
+ border-radius: 3px;
display: inline-block;
+ border: 2px solid #999;
}
+#spambox
+{
+ float: right;
+ overflow: hidden;
+ max-height: 100%;
+}
+
+#background
+{
+ background-image: url( 'img/bg.png' );
+ background-size: 100% 100%;
+ height: 100%;
+}
+body.dark #background
+{
+ background-image: url( 'img/bg_dark.png' );
+}
+body.dark
+{
+ color: #fff;
+}
+
+.server_info
+{
+ display: inline-block;
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ background-image: -webkit-gradient( linear, 0 0, 90% 0, 100% 0, from( ), to( rgba( 0, 0, 0, 0 ) ), to( rgba( 0, 0, 0, 0 ) ) );
+ background-image: -webkit-linear-gradient( left, rgba( 0, 0, 0, 0.4 ) 0%, rgba( 0, 0, 0, 0.03 ) 75%, rgba( 0, 0, 0, 0 ) 100% );
+ padding: 20px;
+ padding-right: 180px;
+ visibility: hidden;
+ white-space: nowrap;
+}
+.server_info.visible
+{
+ visibility: visible;
+}
+.server_info .text
+{
+ display: inline-block;
+ vertical-align: top;
+
+ line-height: 42px;
+ font-size: xx-large;
+}
+.server_info img
+{
+ width: 128px;
+ height: 128px;
+ background: #666;
+ margin-right: 16px;
+}
diff --git a/html/loading.html b/html/loading.html
index 6502e5f..609af63 100644
--- a/html/loading.html
+++ b/html/loading.html
@@ -5,27 +5,58 @@
-
-
+
+
-
-
-
-
+
-
-
+
+
+
+
+
+
+
+
+
+ A really long server name will be here that will be too long to fit on the loading screen
+ gm_hilldirt
+ Snadbox
+
+
-
+
+
+