1 2var g_dialogSavedHardware; 3function BrowserViewHandleMessageFromParent( strMessage, strArguments ) 4{ 5 if ( strMessage == 'OnCloseSaveHardwareDialog' ) 6 { 7 OnAttachPCHardware(); 8 } 9} 10 11function OnAddNewHardware() 12{ 13 if ( Steam.BIsUserInSteamClient() && ( Steam.GetClientPackageVersion() == 0 || Steam.GetClientPackageVersion() >= 1770934110 ) ) 14 { 15 g_dialogSavedHardware.Dismiss(); 16 window.SteamClient.BrowserView.RegisterForMessageFromParent( BrowserViewHandleMessageFromParent ); 17 window.SteamClient.BrowserView.PostMessageToParent( 'ShowSavedHardwareDialog', '' ); 18 } 19 else 20 { 21 ShowAlertDialog( 'Error', 'This can only be done from within the Steam Client.' ); 22 } 23} 24 25function ShowSavedHardwareDialog( rgSavedHardware, funcOnHardwareSelected ) 26{ 27 var content = $J( "<div>", { class: 'saved_hardware_list' } ); 28 const strPanelAttr = '{"focusable":true,"clickOnActivate":true}'; 29 for ( var i = 0; i < rgSavedHardware.length; ++i ) 30 { 31 var hw = rgSavedHardware[i]; 32 var hwDiv = $J( "<div>", { class: 'saved_hardware', text: hw.friendly_name, 'data-panel': strPanelAttr } ); 33 hwDiv.data( 'saved_hardware_id', hw.hardware_id ); 34 hwDiv.click( function( event ) { 35 var el = $J( event.target ); 36 $J( "#AttachedPCHardware" ).val( el.data( 'saved_hardware_id' ) ); 37 g_dialogSavedHardware.Dismiss(); 38 39 if ( funcOnHardwareSelected ) 40 { 41 funcOnHardwareSelected(); 42 } 43 } ); 44 content.append( hwDiv ); 45 } 46 47 // new 48 { 49 var hwDiv = $J( "<div>", { class: 'saved_hardware', text: 'Add new PC configuration', 'data-panel': strPanelAttr } ); 50 hwDiv.click( function() { 51 OnAddNewHardware(); 52 } ); 53 content.append( hwDiv ); 54 } 55 56 g_dialogSavedHardware = ShowAlertDialog( 'Attach PC specs to your review', content, 'Cancel' ); 57 g_dialogSavedHardware.done( function() { 58 if ( funcOnHardwareSelected ) 59 { 60 funcOnHardwareSelected(); 61 } 62 } ); 63} 64 65function OnAttachPCHardwareToReview( baseURL, funcOnHardwareSelected ) 66{ 67 if ( !$J( "#AttachedPCHardware" ).prop( 'checked' ) ) 68 { 69 if ( funcOnHardwareSelected ) 70 { 71 funcOnHardwareSelected(); 72 } 73 return; 74 } 75 76 $J.get( baseURL + '/userreviews/ajaxgetsavedhardware' ) 77 .done( function( results ) 78 { 79 if ( results.success != 1 ) 80 { 81 return; 82 } 83 84 ShowSavedHardwareDialog( results.saved_hardware, funcOnHardwareSelected ); 85 } ); 86} 87 88function UserReview_Award( bLoggedIn, loginURL, recommendationID, callbackFunc, selectedAward ) 89{ 90 if ( bLoggedIn ) 91 { 92 fnLoyalty_ShowAwardModal( recommendationID, 1, callbackFunc, undefined, selectedAward ); 93 } 94 else 95 { 96 var dialog = ShowConfirmDialog( 'Error', 'You must be logged in to perform that action.', 'Sign In' ); 97 dialog.done( function() { 98 top.location.href = loginURL; 99 } ); 100 } 101} 102 103function UserReview_ShowMoreAwards( elem ) 104{ 105 elem = $J( elem ); 106 var container = elem.closest( ".review_award_ctn" ); 107 container.addClass( "show_all_awards" ); 108} 109 110function UserReview_Rate( recommendationID, bRateUp, baseURL, callback ) 111{ 112 $J.post( baseURL + '/userreviews/rate/' + recommendationID,{ 113 'rateup' : bRateUp, 114 'sessionid' : g_sessionID 115 }).done( function( results ) { 116 if ( results.success == 1 ) 117 { 118 callback( results ); 119 } 120 else if ( results.success == 21 ) 121 { 122 ShowAlertDialog( 'Error', 'You must be logged in to perform that action.' ); 123 } 124 else if ( results.success == 15 ) 125 { 126 ShowAlertDialog( 'Error', 'Your account does not have sufficient privileges to perform this action.' ); 127 } 128 else if ( results.success == 24 ) 129 { 130 ShowAlertDialog( 'Error', 'Your account does not meet the requirements to use this feature. <a class="whiteLink" href="https://help.steampowered.com/en/wizard/HelpWithLimitedAccount" target="_blank" rel="noreferrer">Visit Steam Support</a> for more information.' ); 131 } 132 else 133 { 134 ShowAlertDialog( 'Error', 'There was an error trying to process your request: ' + results.success ); 135 } 136 } ); 137} 138 139function UserReview_VoteTag( recommendationID, tagID, bRateUp, baseURL, callback ) 140{ 141 $J.post( baseURL + '/userreviews/votetag/' + recommendationID,{ 142 'tagid' : tagID, 143 'rateup' : bRateUp, 144 'sessionid' : g_sessionID 145 }).done( function( results ) { 146 if ( results.success == 1 ) 147 { 148 callback( results ); 149 } 150 else if ( results.success == 21 ) 151 { 152 ShowAlertDialog( 'Error', 'You must be logged in to perform that action.' ); 153 } 154 else if ( results.success == 15 ) 155 { 156 ShowAlertDialog( 'Error', 'Your account does not have sufficient privileges to perform this action.' ); 157 } 158 else if ( results.success == 24 ) 159 { 160 ShowAlertDialog( 'Error', 'Your account does not meet the requirements to use this feature. <a class="whiteLink" href="https://help.steampowered.com/en/wizard/HelpWithLimitedAccount" target="_blank" rel="noreferrer">Visit Steam Support</a> for more information.' ); 161 } 162 else 163 { 164 ShowAlertDialog( 'Error', 'There was an error trying to process your request: ' + results.success ); 165 } 166 } ); 167} 168 169function UserReview_Report( recommendationID, baseURL, callback ) 170{ 171 var dialog = ShowPromptWithTextAreaDialog( 'Report Review', '', null, null, 1000 ); 172 var explanation = $J('<div/>', { 'class': 'user_review_report_dialog_explanation' } ); 173 explanation.html( 'Please enter the reason why you are reporting this review for violating the Steam Terms of Service or Online Conduct Rules. This cannot be undone.' ); 174 175 var textArea = dialog.m_$Content.find( 'textarea' ); 176 textArea.addClass( "user_review_report_dialog_text_area" ); 177 textArea.parent().before( explanation ); 178 179 dialog.done( function( note ) { 180 if ( !note ) 181 { 182 return; 183 } 184 note = v_trim( note ); 185 if ( note.length < 1 ) 186 { 187 return; 188 } 189 $J.post( baseURL + '/userreviews/report/' + recommendationID, { 190 'reportnote' : note, 191 'sessionid' : g_sessionID 192 }).done( function( results ) { 193 if ( results.success == 1 ) 194 { 195 callback( results ); 196 } 197 else if ( results.success == 21 ) 198 { 199 ShowAlertDialog( 'Error', 'You must be logged in to perform that action.' ); 200 } 201 else 202 {
203 ShowAlertDialog( 'Error', 'There was an error trying to process your request: ' + results.success ); 204 } 205 } ); 206 } ); 207} 208 209function UserReview_ShowUpdateReviewDialog( recommendationID, existingText, baseURL ) 210{ 211 var dialog = ShowPromptWithTextAreaDialog( 'Update Your Review', existingText, null, null, 4096 ); 212 213 dialog.done( function( note ) { 214 if ( !note ) 215 { 216 return; 217 } 218 note = v_trim( note ); 219 if ( note.length < 1 ) 220 { 221 return; 222 } 223 UserReview_Update_Text( recommendationID, note, baseURL, function( results ) { top.location.reload(); } ); 224 } ); 225} 226 227function UserReview_Update( recommendationID, params, baseURL, callback ) 228{ 229 params['sessionid'] = g_sessionID; 230 $J.post( baseURL + '/userreviews/update/' + recommendationID, params ) 231 .done( function( results ) { 232 if ( results.success == 1 ) 233 { 234 if ( callback ) 235 { 236 callback( results ); 237 } 238 } 239 else 240 { 241 ShowAlertDialog( 'Error', 'There was an error trying to process your request: ' + results.success ); 242 } 243 } ); 244} 245 246function UserReview_Update_Visibility( recommendationID, is_public, baseURL, callback ) 247{ 248 UserReview_Update( recommendationID, { 'is_public' : is_public }, baseURL, callback ); 249} 250 251function UserReview_Update_Language( recommendationID, language, baseURL, callback ) 252{ 253 UserReview_Update( recommendationID, { 'language' : language }, baseURL, callback ); 254} 255
256function UserReview_Update_CommentStatus( recommendationID, bCommentsDisabled, baseURL, callback ) 257{ 258 UserReview_Update( recommendationID, { 'comments_disabled' : bCommentsDisabled }, baseURL, callback ); 259} 260 261function UserReview_Update_CommentStatus( recommendationID, bCommentsDisabled, baseURL, callback ) 262{ 263 UserReview_Update( recommendationID, { 'comments_disabled' : bCommentsDisabled }, baseURL, callback ); 264} 265 266function UserReview_Moderate( recommendationID, params, baseURL, callback ) 267{ 268 params['sessionid'] = g_sessionID; 269 $J.post( baseURL + '/userreviews/moderate/' + recommendationID, params ) 270 .done( function( results ) { 271 if ( results.success != 1 ) 272 { 273 var dialog = ShowAlertDialog( 'Error', 'There was an error trying to process your request: ' + results.success ); 274 dialog.done( function() { 275 if ( callback ) 276 { 277 callback( results ); 278 } 279 } ); 280 } 281 else 282 { 283 if ( callback ) 284 { 285 callback( results ); 286 } 287 } 288 } ); 289} 290 291function UserReview_ClearDeveloperFlag( recommendationID, baseURL, callback ) 292{ 293 var dialog = ShowConfirmDialog( 'Clear Developer Flag Reason', 'This review was flagged by the developer. Are you sure you want to clear this status?' ); 294 dialog.done( function() { 295 $J.post( baseURL + '/userreviews/cleardeveloperflag/' + recommendationID, {'sessionid' : g_sessionID} ) 296 .done( function( results ) { 297 if ( results.success == 1 ) 298 { 299 if ( callback ) 300 { 301 callback( results ); 302 } 303 } 304 else 305 { 306 ShowAlertDialog( 'Error', 'There was an error trying to process your request: ' + results.success ); 307 } 308 } ); 309 }); 310} 311 312function UserReview_SetDeveloperResponse( recommendationID, recommendation, baseURL, callback ) 313{ 314 var dialog = ShowPromptWithTextAreaDialog( 'Write a response', recommendation.developer_response, null, null, 8000 ); 315 var explanation = $J('<div/>', { 'class': 'user_review_report_dialog_explanation' } ); 316 explanation.html( 'You can choose to respond to this review in an official capacity. This response will be visible to anyone who can see this review and will be marked as from the developer.' ); 317 318 var textArea = dialog.m_$Content.find( 'textarea' ); 319 textArea.addClass( "user_review_report_dialog_text_area" ); 320 textArea.parent().before( explanation ); 321 322 dialog.done( function( note ) { 323 $J.post( baseURL + '/userreviews/setdeveloperresponse/' + recommendationID,{ 324 'developer_response' : note, 325 'sessionid' : g_sessionID 326 }).done( function( results ) { 327 if ( results.success == 1 ) 328 { 329 callback( results ); 330 } 331 else 332 { 333 ShowAlertDialog( 'Error', 'There was an error trying to process your request: ' + results.success ); 334 } 335 } ); 336 } ); 337} 338 339function UserReview_ShowReportsDialog( recommendationID, baseURL ) 340{ 341 $J.post( baseURL + '/userreviews/ajaxgetreports/' + recommendationID,{ 'sessionid' : g_sessionID } ) 342 .done( function( results ) { 343 if ( results.success == 1 ) 344 { 345 var container = $J('<div/>', {'class': 'review_reports' } ); 346 var reports = results.reports; 347 348 { 349 var reportDiv = $J('<div/>', {'class': 'review_report header' } ); 350 var divReporter = $J('<div/>', {'class': 'review_report_data' } ).append( 'Reporter' ); 351 reportDiv.append( divReporter ); 352 var divDescription = $J('<div/>', {'class': 'review_report_data description' } ).append( 'Report Description' ); 353 reportDiv.append( divDescription ); 354 var divWeight = $J('<div/>', {'class': 'review_report_data' } ).append( 'Weight' ); 355 reportDiv.append( divWeight ); 356 var divWasReset = $J('<div/>', {'class': 'review_report_data' } ).append( 'Cleared?' ); 357 reportDiv.append( divWasReset ); 358 var divTime = $J('<div/>', {'class': 'review_report_data' } ).append( 'Date' ); 359 reportDiv.append( divTime ); 360 var divReviewText = $J('<div/>', {'class': 'review_report_data review_text' } ).append( 'Review Text At Report Time' ); 361 reportDiv.append( divReviewText ); 362 var divClear = $J('<div/>', {'style': 'clear: left' } ); 363 reportDiv.append( divClear ); 364 container.append( reportDiv ); 365 } 366 367 for ( var i = 0; i < reports.length; ++i ) 368 { 369 var report = reports[i]; 370 371 var reportDiv = $J('<div/>', {'class': 'review_report' } ); 372 var divReporter = $J('<div/>', {'class': 'review_report_data' } ).append( $J('<a/>', {'href': report.reporter_url, 'text': report.reporter, 'target': '_blank' } ) ); 373 reportDiv.append( divReporter ); 374 var divDescription = $J('<div/>', {'class': 'review_report_data description' } ).append( report.description ); 375 reportDiv.append( divDescription ); 376 var divWeight = $J('<div/>', {'class': 'review_report_data' } ).append( report.weight ); 377 reportDiv.append( divWeight ); 378 var divWasReset = $J('<div/>', {'class': 'review_report_data' } ).append( report.was_reset ? 'Yes' : 'No' ); 379 reportDiv.append( divWasReset ); 380 var divTime = $J('<div/>', {'class': 'review_report_data' } ).append( report.time_string ); 381 reportDiv.append( divTime ); 382 var divReviewText = $J('<div/>', {'class': 'review_report_data review_text' } ).append( report.review_text ); 383 reportDiv.append( divReviewText ); 384 var divClear = $J('<div/>', {'style': 'clear: left' } ); 385 reportDiv.append( divClear ); 386 container.append( reportDiv ); 387 } 388 var dialog = ShowAlertDialog( 'Clear Reports', container ); 389 } 390 } ); 391} 392 393function UserReview_ShowContentCheckResultsDialog( recommendationID, baseURL ) 394{ 395 $J.get( baseURL + '/userreviews/ajaxgetcontentcheckresults/' + recommendationID ) 396 .done( function( data ) { 397 if ( data.success == 1 ) 398 { 399 var container = $J('<div/>', {'class': 'review_reports' } ); 400 401 { 402 var reportDiv = $J('<div/>', {'class': 'review_report header' } ); 403 var divProvider = $J('<div/>', {'class': 'review_report_data' } ).append( 'Provider' ); 404 reportDiv.append( divProvider ); 405 var divResult = $J('<div/>', {'class': 'review_report_data' } ).append( 'Result' ); 406 reportDiv.append( divResult ); 407 var divScore = $J('<div/>', {'class': 'review_report_data' } ).append( 'Score' ); 408 reportDiv.append( divScore ); 409 var divProviderResponse = $J('<div/>', {'class': 'review_report_data description' } ).append( 'Provider Response' ); 410 reportDiv.append( divProviderResponse ); 411 var divReviewText = $J('<div/>', {'class': 'review_report_data review_text' } ).append( 'Review Text At Eval Time' ); 412 reportDiv.append( divReviewText ); 413 var divTime = $J('<div/>', {'class': 'review_report_data' } ).append( 'Date' ); 414 reportDiv.append( divTime ); 415 var divClear = $J('<div/>', {'style': 'clear: left' } ); 416 reportDiv.append( divClear ); 417 container.append( reportDiv ); 418 } 419 420 for ( var i = 0; i < data.results.length; ++i ) 421 { 422 var r = data.results[i]; 423 var reportDiv = $J('<div/>', {'class': 'review_report' } ); 424 var divProvider = $J('<div/>', {'class': 'review_report_data' } ).append( r.str_provider ); 425 reportDiv.append( divProvider ); 426 var divResult = $J('<div/>', {'class': 'review_report_data' } ).append( r.ban_check_result_string ); 427 reportDiv.append( divResult ); 428 var divScore = $J('<div/>', {'class': 'review_report_data' } ).append( r.score ); 429 reportDiv.append( divScore ); 430 var divProviderResponse = $J('<div/>', {'class': 'review_report_data description' } ).append( r.provider_response ); 431 reportDiv.append( divProviderResponse ); 432 var divReviewText = $J('<div/>', {'class': 'review_report_data review_text' } ).append( r.review_text ); 433 reportDiv.append( divReviewText ); 434 var divTime = $J('<div/>', {'class': 'review_report_data' } ).append( r.timestamp_evaluated_string ); 435 reportDiv.append( divTime ); 436 var divClear = $J('<div/>', {'style': 'clear: left' } ); 437 reportDiv.append( divClear ); 438 container.append( reportDiv ); 439 } 440 var dialog = ShowAlertDialog( 'Suspicious Content Check Results', container ); 441 } 442 } ); 443} 444 445function UserReview_ShowClearReportsDialog( recommendationID, baseURL, callback ) 446{ 447 var dialog = ShowConfirmDialog( 'Clear Reports', 'Are you sure you want to clear all reports? This cannot be undone!' ); 448 dialog.done( function() { 449 UserReview_Moderate( recommendationID, { 'clear_reports' : 1 }, baseURL, callback); 450 }); 451} 452 453function UserReview_ShowVoteBanUsersDialog( recommendationID, baseURL, callback ) 454{ 455 var dialog = ShowConfirmDialog( 'Vote Ban Users', 'Are you sure you want to vote ban users who upvoted this review? This cannot be undone!<br><br>
455This should only be done if this review qualifies as suspicious content.' ); 456 dialog.done( function() { 457 UserReview_Moderate_VoteBanUsers( recommendationID, baseURL, callback); 458 }); 459} 460 461function UserReview_Moderate_SetBanStatus( recommendationID, force_hidden, baseURL, callback, strModerationNote ) 462{ 463 UserReview_Moderate( recommendationID, { 'force_hidden' : force_hidden, 'moderation_note' : strModerationNote }, baseURL, callback ); 464} 465 466function UserReview_Moderate_SetDeveloperFlag( recommendationID, flagged_by_developer, baseURL, callback ) 467{ 468 UserReview_Moderate( recommendationID, { 'flagged_by_developer' : flagged_by_developer }, baseURL, callback ); 469} 470 471function UserReview_Moderate_SetQualities( recommendationID, qualities, baseURL, callback ) 472{ 473 UserReview_Moderate( recommendationID, { 'review_qualities' : qualities, 'update_review_qualities' : 1 }, baseURL, callback ); 474} 475 476function UserReview_Moderate_VoteBanUsers( recommendationID, baseURL, callback ) 477{ 478 UserReview_Moderate( recommendationID, { 'vote_ban_users' : 1 }, baseURL, callback ); 479} 480 481function UserReview_Moderate_UpdateLanguage( recommendationID, language, baseURL, callback ) 482{ 483 UserReview_Moderate( recommendationID, { 'language' : language }, baseURL, callback ); 484}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.