Initial commit
|
|
@ -0,0 +1,16 @@
|
|||
ErrorDocument 403 /RobloniumDefaultErrorPage.aspx?code=403
|
||||
ErrorDocument 404 /RobloniumDefaultErrorPage.aspx?code=404
|
||||
ErrorDocument 500 /RobloniumDefaultErrorPage.aspx?code=500
|
||||
|
||||
RewriteEngine On
|
||||
RewriteCond %{REQUEST_FILENAME}.php -f
|
||||
|
||||
<FilesMatch Friends>
|
||||
RewriteEngine Off
|
||||
SetHandler application/x-httpd-php
|
||||
</FilesMatch>
|
||||
|
||||
RewriteRule (.*) $1.php [L]
|
||||
|
||||
RewriteRule ^(.*?(\b-place\b)[^$]*) PlaceItem.aspx
|
||||
RewriteRule ^(.*?(\b-item\b)[^$]*) Item.aspx
|
||||
|
|
@ -0,0 +1,600 @@
|
|||
<?php
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
ob_start();
|
||||
?>
|
||||
{
|
||||
"wearableAssetTypes":[
|
||||
{
|
||||
"maxNumber":3,
|
||||
"id":8,
|
||||
"name":"Hat"
|
||||
},
|
||||
{
|
||||
"maxNumber":1,
|
||||
"id":18,
|
||||
"name":"Face"
|
||||
},
|
||||
{
|
||||
"maxNumber":1,
|
||||
"id":19,
|
||||
"name":"Gear"
|
||||
},
|
||||
{
|
||||
"maxNumber":1,
|
||||
"id":17,
|
||||
"name":"Head"
|
||||
},
|
||||
{
|
||||
"maxNumber":1,
|
||||
"id":29,
|
||||
"name":"Left Arm"
|
||||
},
|
||||
{
|
||||
"maxNumber":1,
|
||||
"id":30,
|
||||
"name":"Left Leg"
|
||||
},
|
||||
{
|
||||
"maxNumber":1,
|
||||
"id":12,
|
||||
"name":"Pants"
|
||||
},
|
||||
{
|
||||
"maxNumber":1,
|
||||
"id":28,
|
||||
"name":"Right Arm"
|
||||
},
|
||||
{
|
||||
"maxNumber":1,
|
||||
"id":31,
|
||||
"name":"Right Leg"
|
||||
},
|
||||
{
|
||||
"maxNumber":1,
|
||||
"id":11,
|
||||
"name":"Shirt"
|
||||
},
|
||||
{
|
||||
"maxNumber":1,
|
||||
"id":2,
|
||||
"name":"T-Shirt"
|
||||
},
|
||||
{
|
||||
"maxNumber":1,
|
||||
"id":27,
|
||||
"name":"Torso"
|
||||
}
|
||||
],
|
||||
"bodyColorsPalette":[
|
||||
{
|
||||
"brickColorId":361,
|
||||
"hexColor":"#564236",
|
||||
"name":"Dirt brown"
|
||||
},
|
||||
{
|
||||
"brickColorId":192,
|
||||
"hexColor":"#694028",
|
||||
"name":"Reddish brown"
|
||||
},
|
||||
{
|
||||
"brickColorId":217,
|
||||
"hexColor":"#7C5C46",
|
||||
"name":"Brown"
|
||||
},
|
||||
{
|
||||
"brickColorId":153,
|
||||
"hexColor":"#957977",
|
||||
"name":"Sand red"
|
||||
},
|
||||
{
|
||||
"brickColorId":359,
|
||||
"hexColor":"#AF9483",
|
||||
"name":"Linen"
|
||||
},
|
||||
{
|
||||
"brickColorId":352,
|
||||
"hexColor":"#C7AC78",
|
||||
"name":"Burlap"
|
||||
},
|
||||
{
|
||||
"brickColorId":5,
|
||||
"hexColor":"#D7C59A",
|
||||
"name":"Brick yellow"
|
||||
},
|
||||
{
|
||||
"brickColorId":101,
|
||||
"hexColor":"#DA867A",
|
||||
"name":"Medium red"
|
||||
},
|
||||
{
|
||||
"brickColorId":1007,
|
||||
"hexColor":"#A34B4B",
|
||||
"name":"Dusty Rose"
|
||||
},
|
||||
{
|
||||
"brickColorId":1014,
|
||||
"hexColor":"#AA5500",
|
||||
"name":"CGA brown"
|
||||
},
|
||||
{
|
||||
"brickColorId":38,
|
||||
"hexColor":"#A05F35",
|
||||
"name":"Dark orange"
|
||||
},
|
||||
{
|
||||
"brickColorId":18,
|
||||
"hexColor":"#CC8E69",
|
||||
"name":"Nougat"
|
||||
},
|
||||
{
|
||||
"brickColorId":125,
|
||||
"hexColor":"#EAB892",
|
||||
"name":"Light orange"
|
||||
},
|
||||
{
|
||||
"brickColorId":1030,
|
||||
"hexColor":"#FFCC99",
|
||||
"name":"Pastel brown"
|
||||
},
|
||||
{
|
||||
"brickColorId":133,
|
||||
"hexColor":"#D5733D",
|
||||
"name":"Neon orange"
|
||||
},
|
||||
{
|
||||
"brickColorId":106,
|
||||
"hexColor":"#DA8541",
|
||||
"name":"Bright orange"
|
||||
},
|
||||
{
|
||||
"brickColorId":105,
|
||||
"hexColor":"#E29B40",
|
||||
"name":"Br. yellowish orange"
|
||||
},
|
||||
{
|
||||
"brickColorId":1017,
|
||||
"hexColor":"#FFAF00",
|
||||
"name":"Deep orange"
|
||||
},
|
||||
{
|
||||
"brickColorId":24,
|
||||
"hexColor":"#F5CD30",
|
||||
"name":"Bright yellow"
|
||||
},
|
||||
{
|
||||
"brickColorId":334,
|
||||
"hexColor":"#F8D96D",
|
||||
"name":"Daisy orange"
|
||||
},
|
||||
{
|
||||
"brickColorId":226,
|
||||
"hexColor":"#FDEA8D",
|
||||
"name":"Cool yellow"
|
||||
},
|
||||
{
|
||||
"brickColorId":141,
|
||||
"hexColor":"#27462D",
|
||||
"name":"Earth green"
|
||||
},
|
||||
{
|
||||
"brickColorId":1021,
|
||||
"hexColor":"#3A7D15",
|
||||
"name":"Camo"
|
||||
},
|
||||
{
|
||||
"brickColorId":28,
|
||||
"hexColor":"#287F47",
|
||||
"name":"Dark green"
|
||||
},
|
||||
{
|
||||
"brickColorId":37,
|
||||
"hexColor":"#4B974B",
|
||||
"name":"Bright green"
|
||||
},
|
||||
{
|
||||
"brickColorId":310,
|
||||
"hexColor":"#5B9A4C",
|
||||
"name":"Shamrock"
|
||||
},
|
||||
{
|
||||
"brickColorId":317,
|
||||
"hexColor":"#7C9C6B",
|
||||
"name":"Moss"
|
||||
},
|
||||
{
|
||||
"brickColorId":119,
|
||||
"hexColor":"#A4BD47",
|
||||
"name":"Br. yellowish green"
|
||||
},
|
||||
{
|
||||
"brickColorId":1011,
|
||||
"hexColor":"#002060",
|
||||
"name":"Navy blue"
|
||||
},
|
||||
{
|
||||
"brickColorId":1012,
|
||||
"hexColor":"#2154B9",
|
||||
"name":"Deep blue"
|
||||
},
|
||||
{
|
||||
"brickColorId":1010,
|
||||
"hexColor":"#0000FF",
|
||||
"name":"Really blue"
|
||||
},
|
||||
{
|
||||
"brickColorId":23,
|
||||
"hexColor":"#0D69AC",
|
||||
"name":"Bright blue"
|
||||
},
|
||||
{
|
||||
"brickColorId":305,
|
||||
"hexColor":"#527CAE",
|
||||
"name":"Steel blue"
|
||||
},
|
||||
{
|
||||
"brickColorId":102,
|
||||
"hexColor":"#6E99CA",
|
||||
"name":"Medium blue"
|
||||
},
|
||||
{
|
||||
"brickColorId":45,
|
||||
"hexColor":"#B4D2E4",
|
||||
"name":"Light blue"
|
||||
},
|
||||
{
|
||||
"brickColorId":107,
|
||||
"hexColor":"#008F9C",
|
||||
"name":"Bright bluish green"
|
||||
},
|
||||
{
|
||||
"brickColorId":1018,
|
||||
"hexColor":"#12EED4",
|
||||
"name":"Teal"
|
||||
},
|
||||
{
|
||||
"brickColorId":1027,
|
||||
"hexColor":"#9FF3E9",
|
||||
"name":"Pastel blue-green"
|
||||
},
|
||||
{
|
||||
"brickColorId":1019,
|
||||
"hexColor":"#00FFFF",
|
||||
"name":"Toothpaste"
|
||||
},
|
||||
{
|
||||
"brickColorId":1013,
|
||||
"hexColor":"#04AFEC",
|
||||
"name":"Cyan"
|
||||
},
|
||||
{
|
||||
"brickColorId":11,
|
||||
"hexColor":"#80BBDC",
|
||||
"name":"Pastel Blue"
|
||||
},
|
||||
{
|
||||
"brickColorId":1024,
|
||||
"hexColor":"#AFDDFF",
|
||||
"name":"Pastel light blue"
|
||||
},
|
||||
{
|
||||
"brickColorId":104,
|
||||
"hexColor":"#6B327C",
|
||||
"name":"Bright violet"
|
||||
},
|
||||
{
|
||||
"brickColorId":1023,
|
||||
"hexColor":"#8C5B9F",
|
||||
"name":"Lavender"
|
||||
},
|
||||
{
|
||||
"brickColorId":321,
|
||||
"hexColor":"#A75E9B",
|
||||
"name":"Lilac"
|
||||
},
|
||||
{
|
||||
"brickColorId":1015,
|
||||
"hexColor":"#AA00AA",
|
||||
"name":"Magenta"
|
||||
},
|
||||
{
|
||||
"brickColorId":1031,
|
||||
"hexColor":"#6225D1",
|
||||
"name":"Royal purple"
|
||||
},
|
||||
{
|
||||
"brickColorId":1006,
|
||||
"hexColor":"#B480FF",
|
||||
"name":"Alder"
|
||||
},
|
||||
{
|
||||
"brickColorId":1026,
|
||||
"hexColor":"#B1A7FF",
|
||||
"name":"Pastel violet"
|
||||
},
|
||||
{
|
||||
"brickColorId":21,
|
||||
"hexColor":"#C4281C",
|
||||
"name":"Bright red"
|
||||
},
|
||||
{
|
||||
"brickColorId":1004,
|
||||
"hexColor":"#FF0000",
|
||||
"name":"Really red"
|
||||
},
|
||||
{
|
||||
"brickColorId":1032,
|
||||
"hexColor":"#FF00BF",
|
||||
"name":"Hot pink"
|
||||
},
|
||||
{
|
||||
"brickColorId":1016,
|
||||
"hexColor":"#FF66CC",
|
||||
"name":"Pink"
|
||||
},
|
||||
{
|
||||
"brickColorId":330,
|
||||
"hexColor":"#FF98DC",
|
||||
"name":"Carnation pink"
|
||||
},
|
||||
{
|
||||
"brickColorId":9,
|
||||
"hexColor":"#E8BAC8",
|
||||
"name":"Light reddish violet"
|
||||
},
|
||||
{
|
||||
"brickColorId":1025,
|
||||
"hexColor":"#FFC9C9",
|
||||
"name":"Pastel orange"
|
||||
},
|
||||
{
|
||||
"brickColorId":364,
|
||||
"hexColor":"#5A4C42",
|
||||
"name":"Dark taupe"
|
||||
},
|
||||
{
|
||||
"brickColorId":351,
|
||||
"hexColor":"#BC9B5D",
|
||||
"name":"Cork"
|
||||
},
|
||||
{
|
||||
"brickColorId":1008,
|
||||
"hexColor":"#C1BE42",
|
||||
"name":"Olive"
|
||||
},
|
||||
{
|
||||
"brickColorId":29,
|
||||
"hexColor":"#A1C48C",
|
||||
"name":"Medium green"
|
||||
},
|
||||
{
|
||||
"brickColorId":1022,
|
||||
"hexColor":"#7F8E64",
|
||||
"name":"Grime"
|
||||
},
|
||||
{
|
||||
"brickColorId":151,
|
||||
"hexColor":"#789082",
|
||||
"name":"Sand green"
|
||||
},
|
||||
{
|
||||
"brickColorId":135,
|
||||
"hexColor":"#74869D",
|
||||
"name":"Sand blue"
|
||||
},
|
||||
{
|
||||
"brickColorId":1020,
|
||||
"hexColor":"#00FF00",
|
||||
"name":"Lime green"
|
||||
},
|
||||
{
|
||||
"brickColorId":1028,
|
||||
"hexColor":"#CCFFCC",
|
||||
"name":"Pastel green"
|
||||
},
|
||||
{
|
||||
"brickColorId":1009,
|
||||
"hexColor":"#FFFF00",
|
||||
"name":"New Yeller"
|
||||
},
|
||||
{
|
||||
"brickColorId":1029,
|
||||
"hexColor":"#FFFFCC",
|
||||
"name":"Pastel yellow"
|
||||
},
|
||||
{
|
||||
"brickColorId":1003,
|
||||
"hexColor":"#111111",
|
||||
"name":"Really black"
|
||||
},
|
||||
{
|
||||
"brickColorId":26,
|
||||
"hexColor":"#1B2A35",
|
||||
"name":"Black"
|
||||
},
|
||||
{
|
||||
"brickColorId":199,
|
||||
"hexColor":"#635F62",
|
||||
"name":"Dark stone grey"
|
||||
},
|
||||
{
|
||||
"brickColorId":194,
|
||||
"hexColor":"#A3A2A5",
|
||||
"name":"Medium stone grey"
|
||||
},
|
||||
{
|
||||
"brickColorId":1002,
|
||||
"hexColor":"#CDCDCD",
|
||||
"name":"Mid gray"
|
||||
},
|
||||
{
|
||||
"brickColorId":208,
|
||||
"hexColor":"#E5E4DF",
|
||||
"name":"Light stone grey"
|
||||
},
|
||||
{
|
||||
"brickColorId":1,
|
||||
"hexColor":"#F2F3F3",
|
||||
"name":"White"
|
||||
},
|
||||
{
|
||||
"brickColorId":1001,
|
||||
"hexColor":"#F8F8F8",
|
||||
"name":"Institutional white"
|
||||
}
|
||||
],
|
||||
"basicBodyColorsPalette":[
|
||||
{
|
||||
"brickColorId":364,
|
||||
"hexColor":"#5A4C42",
|
||||
"name":"Dark taupe"
|
||||
},
|
||||
{
|
||||
"brickColorId":217,
|
||||
"hexColor":"#7C5C46",
|
||||
"name":"Brown"
|
||||
},
|
||||
{
|
||||
"brickColorId":359,
|
||||
"hexColor":"#AF9483",
|
||||
"name":"Linen"
|
||||
},
|
||||
{
|
||||
"brickColorId":18,
|
||||
"hexColor":"#CC8E69",
|
||||
"name":"Nougat"
|
||||
},
|
||||
{
|
||||
"brickColorId":125,
|
||||
"hexColor":"#EAB892",
|
||||
"name":"Light orange"
|
||||
},
|
||||
{
|
||||
"brickColorId":361,
|
||||
"hexColor":"#564236",
|
||||
"name":"Dirt brown"
|
||||
},
|
||||
{
|
||||
"brickColorId":192,
|
||||
"hexColor":"#694028",
|
||||
"name":"Reddish brown"
|
||||
},
|
||||
{
|
||||
"brickColorId":351,
|
||||
"hexColor":"#BC9B5D",
|
||||
"name":"Cork"
|
||||
},
|
||||
{
|
||||
"brickColorId":352,
|
||||
"hexColor":"#C7AC78",
|
||||
"name":"Burlap"
|
||||
},
|
||||
{
|
||||
"brickColorId":5,
|
||||
"hexColor":"#D7C59A",
|
||||
"name":"Brick yellow"
|
||||
},
|
||||
{
|
||||
"brickColorId":153,
|
||||
"hexColor":"#957977",
|
||||
"name":"Sand red"
|
||||
},
|
||||
{
|
||||
"brickColorId":1007,
|
||||
"hexColor":"#A34B4B",
|
||||
"name":"Dusty Rose"
|
||||
},
|
||||
{
|
||||
"brickColorId":101,
|
||||
"hexColor":"#DA867A",
|
||||
"name":"Medium red"
|
||||
},
|
||||
{
|
||||
"brickColorId":1025,
|
||||
"hexColor":"#FFC9C9",
|
||||
"name":"Pastel orange"
|
||||
},
|
||||
{
|
||||
"brickColorId":330,
|
||||
"hexColor":"#FF98DC",
|
||||
"name":"Carnation pink"
|
||||
},
|
||||
{
|
||||
"brickColorId":135,
|
||||
"hexColor":"#74869D",
|
||||
"name":"Sand blue"
|
||||
},
|
||||
{
|
||||
"brickColorId":305,
|
||||
"hexColor":"#527CAE",
|
||||
"name":"Steel blue"
|
||||
},
|
||||
{
|
||||
"brickColorId":11,
|
||||
"hexColor":"#80BBDC",
|
||||
"name":"Pastel Blue"
|
||||
},
|
||||
{
|
||||
"brickColorId":1026,
|
||||
"hexColor":"#B1A7FF",
|
||||
"name":"Pastel violet"
|
||||
},
|
||||
{
|
||||
"brickColorId":321,
|
||||
"hexColor":"#A75E9B",
|
||||
"name":"Lilac"
|
||||
},
|
||||
{
|
||||
"brickColorId":107,
|
||||
"hexColor":"#008F9C",
|
||||
"name":"Bright bluish green"
|
||||
},
|
||||
{
|
||||
"brickColorId":310,
|
||||
"hexColor":"#5B9A4C",
|
||||
"name":"Shamrock"
|
||||
},
|
||||
{
|
||||
"brickColorId":317,
|
||||
"hexColor":"#7C9C6B",
|
||||
"name":"Moss"
|
||||
},
|
||||
{
|
||||
"brickColorId":29,
|
||||
"hexColor":"#A1C48C",
|
||||
"name":"Medium green"
|
||||
},
|
||||
{
|
||||
"brickColorId":105,
|
||||
"hexColor":"#E29B40",
|
||||
"name":"Br. yellowish orange"
|
||||
},
|
||||
{
|
||||
"brickColorId":24,
|
||||
"hexColor":"#F5CD30",
|
||||
"name":"Bright yellow"
|
||||
},
|
||||
{
|
||||
"brickColorId":334,
|
||||
"hexColor":"#F8D96D",
|
||||
"name":"Daisy orange"
|
||||
},
|
||||
{
|
||||
"brickColorId":199,
|
||||
"hexColor":"#635F62",
|
||||
"name":"Dark stone grey"
|
||||
},
|
||||
{
|
||||
"brickColorId":1002,
|
||||
"hexColor":"#CDCDCD",
|
||||
"name":"Mid gray"
|
||||
},
|
||||
{
|
||||
"brickColorId":1001,
|
||||
"hexColor":"#F8F8F8",
|
||||
"name":"Institutional white"
|
||||
}
|
||||
]
|
||||
}
|
||||
<?php
|
||||
echo(json_encode(json_decode(ob_get_clean())));
|
||||
?>
|
||||
|
|
@ -0,0 +1,82 @@
|
|||
<?php
|
||||
require $_SERVER["DOCUMENT_ROOT"] . '/global.php';
|
||||
//if ($_SERVER['REQUEST_METHOD'] !== 'POST') { die(header("Location: /RobloniumDefaultErrorPage.aspx?code=400")); }
|
||||
|
||||
function errorModal($title, $errorMsg)
|
||||
{
|
||||
die(json_encode(array(
|
||||
'statusCode' => 500,
|
||||
'showDivID' => 'TransactionFailureView',
|
||||
'title' => $title,
|
||||
'errorMsg' => $errorMsg
|
||||
)));
|
||||
}
|
||||
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
if(!SESSION)
|
||||
{
|
||||
errorModal("Transaction Error", "You are not logged in.");
|
||||
}
|
||||
|
||||
if(!isset($_GET['productID']) || !isset($_GET['expectedCurrency']) || !isset($_GET['expectedPrice']) || !isset($_GET['expectedSellerID']) || !isset($_GET['rqtype']))
|
||||
{
|
||||
errorModal("Transaction Error", "An error occured when trying to fetch data. Please try again.");
|
||||
}
|
||||
|
||||
$assetInfo = getMarketplaceInfo($_GET['productID']);
|
||||
|
||||
if(!$assetInfo){ errorModal("Transaction Error", "This item does not exist."); }
|
||||
if(!$assetInfo->IsForSale){ errorModal("Transaction Error", "This item is not for sale."); }
|
||||
|
||||
if(($assetInfo->PriceInRobux || $assetInfo->PriceInRobux + $assetInfo->PriceInTickets == 0) && $_GET['expectedCurrency'] == 1)
|
||||
{
|
||||
$expectedCurrency = 1;
|
||||
$price = $assetInfo->PriceInRobux;
|
||||
$balanceAfterSale = SESSION["robux"] - $price;
|
||||
}
|
||||
elseif($assetInfo->PriceInTickets && $_GET['expectedCurrency'] == 2)
|
||||
{
|
||||
$expectedCurrency = 2;
|
||||
$price = $assetInfo->PriceInTickets;
|
||||
$balanceAfterSale = SESSION["tickets"] - $price;
|
||||
}
|
||||
elseif($_GET['expectedCurrency'] != $price)
|
||||
{
|
||||
die(json_encode([
|
||||
'statusCode' => 500,
|
||||
'showDivID' => 'PriceChangedView',
|
||||
'title' => 'Price Changed',
|
||||
'errorMsg' => 'This item has changed price. Please try again.',
|
||||
//'balanceAfterSale' => $balanceAfterSale,
|
||||
//'expectedPrice' => $_GET['expectedPrice'],
|
||||
//'expectedCurrency' => $_GET['expectedCurrency'],
|
||||
//'currentCurrency' => $expectedCurrency,
|
||||
//'currentPrice' => $price,
|
||||
'AssetID' => $assetInfo->AssetId
|
||||
]));
|
||||
}
|
||||
|
||||
if($_GET['expectedSellerID'] != $assetInfo->CreatorId){ errorModal("Transaction Error", "An error occured when verifying data. Please try again."); }
|
||||
|
||||
$purchaseResult = purchaseAsset(SESSION["userid"], $assetInfo->AssetId, $expectedCurrency);
|
||||
|
||||
if($purchaseResult == "Success")
|
||||
{
|
||||
$purchaseMessage =
|
||||
[
|
||||
'TransactionVerb' => 'purchased',
|
||||
'AssetName' => $assetInfo->Name,
|
||||
'AssetType' => assetTypeToString($assetInfo->AssetTypeId),
|
||||
'Price' => $price,
|
||||
'Currency' => 1,
|
||||
'SellerName' => getNameFromUid($assetInfo->CreatorId), //this is changed later based on the seller name
|
||||
'AssetID' => $assetInfo->AssetId,
|
||||
'expectedCurrency' => $expectedCurrency,
|
||||
'currentCurrency' => $_GET['expectedCurrency']
|
||||
];
|
||||
echo json_encode($purchaseMessage);
|
||||
}
|
||||
else
|
||||
{
|
||||
die(errorModal("Transaction Error", $purchaseResult));
|
||||
}
|
||||
|
|
@ -0,0 +1,61 @@
|
|||
<?php
|
||||
header("content-type: application/json; charset=utf-8");
|
||||
require_once $_SERVER['DOCUMENT_ROOT']."/Hexine/api/core_functions.php";
|
||||
|
||||
function returnError($code, $message, $type = 0)
|
||||
{
|
||||
if($type == 0){ $array = ["code" => $code, "message" => $message]; }
|
||||
else{ $array = ['errors' =>[['code' => 400,'message' => 'BadRequest']]]; }
|
||||
header("HTTP/1.1 $code $message");
|
||||
die(json_encode($array));
|
||||
}
|
||||
|
||||
// some checks
|
||||
if(isset($_GET['assetId'])){ $assetId = $_GET['assetId']; } else { returnError(500, "InternalServerError"); }
|
||||
if(!filter_var($assetId, FILTER_VALIDATE_INT)){ returnError(500, "InternalServerError"); }
|
||||
if(isset($_GET['rbx'])){ die(file_get_contents("http://api.roblox.com/marketplace/productinfo?".$_SERVER['QUERY_STRING'])); }
|
||||
|
||||
//then query
|
||||
$query = $pdo->prepare("SELECT * FROM asset WHERE AssetId = :id");
|
||||
$query->bindParam(":id", $assetId, PDO::PARAM_INT);
|
||||
$query->execute();
|
||||
if(!$query->rowCount()){ returnError(400, "BadRequest", 1); }
|
||||
$row = $query->fetch(PDO::FETCH_OBJ);
|
||||
|
||||
//check if the item was created in the last 3 days to determine whether it's new or not
|
||||
$timestamp = strtotime($row->Created);
|
||||
if($timestamp + 259200 > time()){ $IsNew = true; } else{ $IsNew = false; }
|
||||
|
||||
$data =
|
||||
[
|
||||
'TargetId' => intval($row->AssetId),
|
||||
'ProductType' => 'User Product',
|
||||
'AssetId' => intval($row->AssetId),
|
||||
'ProductId' => 1305046,
|
||||
'Name' => $row->Name,
|
||||
'Description' => $row->Description,
|
||||
'AssetTypeId' => $row->AssetTypeId,
|
||||
'Creator' =>
|
||||
[
|
||||
'Id' => intval($row->CreatorId),
|
||||
'Name' => getNameFromUid($row->CreatorId),
|
||||
'CreatorType' => 'User',
|
||||
'CreatorTargetId' => intval($row->CreatorId)
|
||||
],
|
||||
'IconImageAssetId' => 607948062,
|
||||
'Created' => $row->Created,
|
||||
'Updated' => $row->Updated,
|
||||
'PriceInRobux' => intval($row->PriceInRobux),
|
||||
'PriceInTickets' => intval($row->PriceInTickets),
|
||||
'Sales' => intval($row->Sales),
|
||||
'IsNew' => $IsNew,
|
||||
'IsForSale' => boolval($row->IsForSale),
|
||||
'IsPublicDomain' => boolval($row->IsPublicDomain),
|
||||
'IsLimited' => boolval($row->IsLimited),
|
||||
'IsLimitedUnique' => boolval($row->IsLimitedUnique),
|
||||
'Remaining' => intval($row->Remaining),
|
||||
'MinimumMembershipLevel' => intval($row->MinimumMembershipLevel),
|
||||
'ContentRatingTypeId' => intval($row->ContentRatingTypeId)
|
||||
];
|
||||
|
||||
die(json_encode($data));
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
<?php
|
||||
$post = file_get_contents('php://input');
|
||||
$data = file_get_contents($_SERVER["DOCUMENT_ROOT"]."../Analytics/Logs/Report.log") . "\n" . $post;
|
||||
file_put_contents($_SERVER["DOCUMENT_ROOT"]."../Analytics/Logs/Report.log", $data);
|
||||
?>
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
<FilesMatch $>
|
||||
SetHandler application/x-httpd-php
|
||||
</FilesMatch>
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
<?php
|
||||
header('Content-Type:application/json');
|
||||
$newModal = [
|
||||
"title" => "Error",
|
||||
"message" => "An unkown error occurred!"
|
||||
];
|
||||
$newModal['message'] = "Sorry, but username changing has not been implemented yet.";
|
||||
die(json_encode($newModal));
|
||||
?>
|
||||
|
|
@ -0,0 +1,80 @@
|
|||
.experiment {
|
||||
clear: both;
|
||||
font-weight: bold;
|
||||
}
|
||||
.experiment-details {
|
||||
float: left;
|
||||
}
|
||||
.experiment-details span.name {
|
||||
font-weight: bold;
|
||||
font-size: 14px;
|
||||
}
|
||||
.versions {
|
||||
clear: both;
|
||||
}
|
||||
.versions .version {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.eligibility-criteria-box {
|
||||
min-height: 300px;
|
||||
}
|
||||
.eligibility-control-button {
|
||||
width: 100px;
|
||||
}
|
||||
|
||||
.new-version {
|
||||
margin-right: 10px;
|
||||
}
|
||||
input.short {
|
||||
width: 60px;
|
||||
margin-bottom: 5px;
|
||||
display: inline-block;
|
||||
}
|
||||
.dialog-label {
|
||||
font-weight:normal;
|
||||
}
|
||||
.varation_percentage_container {
|
||||
width: 100px;
|
||||
display: inline-block;
|
||||
}
|
||||
.border-bottom {
|
||||
border-bottom: 1px solid #ccc;
|
||||
}
|
||||
.clear {
|
||||
clear: both;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.ContentPaneFloat {
|
||||
min-width: 1000px;
|
||||
}
|
||||
.hint {
|
||||
font-size: 11px;
|
||||
color: #666;
|
||||
}
|
||||
.hide-version {
|
||||
display: none;
|
||||
}
|
||||
.hide {
|
||||
display: none;
|
||||
}
|
||||
.label {
|
||||
font-weight: normal;
|
||||
}
|
||||
.labelheader {
|
||||
width: 170px;
|
||||
display: inline-block;
|
||||
font-weight: bold;
|
||||
padding-top: 3px;
|
||||
}
|
||||
.labelheader.details {
|
||||
font-weight: normal;
|
||||
}
|
||||
.version-details {
|
||||
font-weight: normal;
|
||||
}
|
||||
.buttons span {
|
||||
float: left;
|
||||
display: block;
|
||||
}
|
||||
|
|
@ -0,0 +1,427 @@
|
|||
.pointer {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
span.ErrorMessage {
|
||||
font-weight: bold;
|
||||
color: red;
|
||||
}
|
||||
div.adminDash
|
||||
{
|
||||
color:#585858;
|
||||
}
|
||||
div#recaptcha_area
|
||||
{
|
||||
margin: 0 auto;
|
||||
margin-left: -40px;
|
||||
}
|
||||
|
||||
div.NavigationPaneFloat .navSection
|
||||
{
|
||||
padding-left:10px;
|
||||
}
|
||||
div.NavigationPaneFloat ul
|
||||
{
|
||||
margin:0px;
|
||||
margin-bottom:10px;
|
||||
}
|
||||
|
||||
span.robux, .currency.CurrencyColor1 {
|
||||
background: url('/UnsecureContent/images/img-robux.png') no-repeat 0px 1px;
|
||||
color: #060;
|
||||
font-weight: bold;
|
||||
padding: 0px 0px 2px 20px;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
span.tickets, .currency.CurrencyColor2 {
|
||||
background: url('/UnsecureContent/images/Tickets.png') no-repeat 0px 1px;
|
||||
color: #A61;
|
||||
padding: 0px 0px 2px 20px;
|
||||
font-weight: bold;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
div.navHeader
|
||||
{
|
||||
border-bottom: 1px solid #DDD;
|
||||
margin-bottom: 5px;
|
||||
margin-top: 10px;
|
||||
padding-left: 10px;
|
||||
color: #4D4D4D;
|
||||
font-weight: bold;
|
||||
font-size: 15px;
|
||||
cursor: pointer;
|
||||
}
|
||||
body {
|
||||
font-family: Arial,Helvetica,sans-serif;
|
||||
font-size: 13px;
|
||||
background-color: #FCFCFC;
|
||||
margin: 0;
|
||||
}
|
||||
.body-with-header {
|
||||
padding-top: 75px;
|
||||
}
|
||||
div.header
|
||||
{
|
||||
margin:0 0 10px;
|
||||
background: #F0F0F0;
|
||||
text-align: right;
|
||||
padding: 5px 5px 5px 5px;
|
||||
border-top: 2px solid #3679BC;
|
||||
height: 18px;
|
||||
}
|
||||
a
|
||||
{
|
||||
color: #095fb5;
|
||||
text-decoration: none;
|
||||
}
|
||||
a:hover
|
||||
{
|
||||
text-decoration: underline;
|
||||
cursor: pointer;
|
||||
}
|
||||
div.header div.headerFloatLeft span.redBoldWarn
|
||||
{ color: red;
|
||||
font-weight: bold;
|
||||
}
|
||||
div.ContentPaneFloat
|
||||
{
|
||||
padding-left: 230px;
|
||||
min-height:500px;
|
||||
}
|
||||
div.NavigationPaneFloat
|
||||
{
|
||||
float:left;
|
||||
width:220px;
|
||||
padding: 0 10px;
|
||||
}
|
||||
h1
|
||||
{
|
||||
margin-top:35px;
|
||||
margin-bottom:12px;
|
||||
font-size: 40px;
|
||||
font-weight: bold;
|
||||
color:#363636;
|
||||
letter-spacing:-2px;
|
||||
}
|
||||
h2
|
||||
{
|
||||
font-size:16px;
|
||||
font-weight:bold;
|
||||
text-transform: uppercase;
|
||||
color:#000;
|
||||
}
|
||||
/* Legacy */
|
||||
.StandardTabWhite,
|
||||
.StandardTabGrayActive,
|
||||
.StandardTabGray
|
||||
{
|
||||
display:inline-block;
|
||||
height:26px;
|
||||
z-index: 2;
|
||||
position:relative;
|
||||
*display:inline;
|
||||
*zoom:1;
|
||||
}
|
||||
.StandardTabWhite span
|
||||
{
|
||||
*padding-right:14px;
|
||||
}
|
||||
.StandardTabGray
|
||||
{
|
||||
background-color: #b4cde9;
|
||||
margin-right: 4px;
|
||||
}
|
||||
li.ConfigTabs
|
||||
{
|
||||
padding: 6px 10px 0px 10px;
|
||||
}
|
||||
.StandardTabGrayActive
|
||||
{
|
||||
margin-right: 4px;
|
||||
}
|
||||
|
||||
.StandardTabGray a,
|
||||
.StandardTabGrayActive a
|
||||
{
|
||||
color: White;
|
||||
}
|
||||
.StandardTabGray a:hover,
|
||||
.StandardTabGrayActive a:hover
|
||||
{
|
||||
text-decoration:none;
|
||||
}
|
||||
|
||||
.StandardTabGray:hover,
|
||||
.StandardTabGrayActive
|
||||
{
|
||||
background-color: #6c98cb;
|
||||
color: White;
|
||||
}
|
||||
|
||||
|
||||
div.header div.headerFloatLeft
|
||||
{
|
||||
float:left;
|
||||
}
|
||||
div.header div.headerFloatRight
|
||||
{
|
||||
float:right;
|
||||
}
|
||||
.BadgeLists { width:150px;}
|
||||
.LoyaltyDateTextbox { width:80px}
|
||||
|
||||
|
||||
|
||||
/* login page */
|
||||
div.Signin
|
||||
{
|
||||
margin: 0 auto;
|
||||
width: 198px;
|
||||
margin-top: 150px;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
div.Signin .formRow
|
||||
{
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
div.Signin .formRow label
|
||||
{
|
||||
display: block;
|
||||
}
|
||||
div.Signin .formRow input
|
||||
{
|
||||
border: 1px solid #999;
|
||||
padding: 3px;
|
||||
width: 190px;
|
||||
}
|
||||
|
||||
div.Signin .formRowSubmit
|
||||
{
|
||||
text-align: right;
|
||||
margin-top: 12px;
|
||||
}
|
||||
div.Signin .formRowSubmit input
|
||||
{
|
||||
border: 1px solid #999;
|
||||
padding: 3px 6px;
|
||||
border-radius: 3px;
|
||||
margin: 0;
|
||||
}
|
||||
div.Signin .formRowSubmit input:hover
|
||||
{
|
||||
cursor: pointer;
|
||||
background: white;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
/* Dividers */
|
||||
.divider-top {
|
||||
border-top: 1px solid #ccc;
|
||||
}
|
||||
.divider-bottom {
|
||||
border-bottom: 1px solid #ccc;
|
||||
}
|
||||
.divider-left {
|
||||
border-left: 1px solid #ccc;
|
||||
}
|
||||
.divider-right {
|
||||
border-right: 1px solid #ccc;
|
||||
}
|
||||
|
||||
.error-message {
|
||||
color: black;
|
||||
background-color: #FAE5E5;
|
||||
border: solid 1px #c00;
|
||||
margin-bottom: 10px;
|
||||
text-align: left;
|
||||
padding: 3px 10px;
|
||||
}
|
||||
|
||||
/* Styles for validation helpers
|
||||
-----------------------------------------------------------*/
|
||||
.field-validation-error
|
||||
{
|
||||
color: #ff0000;
|
||||
}
|
||||
|
||||
.field-validation-valid
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
|
||||
.input-validation-error
|
||||
{
|
||||
border: 1px solid #ff0000 !important;
|
||||
background-color: #ffeeee;
|
||||
}
|
||||
|
||||
.validation-summary-errors
|
||||
{
|
||||
font-weight: bold;
|
||||
color: #ff0000;
|
||||
}
|
||||
|
||||
.validation-summary-valid
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
/* paging */
|
||||
.pager {
|
||||
margin: 4px 7px 2px 4px;
|
||||
}
|
||||
.pager.first,
|
||||
.pager.last {
|
||||
display: none;
|
||||
}
|
||||
.pager.previous {
|
||||
display: inline-block;
|
||||
background: url('/UnsecureContent/images/buttons/btn-silver-left-27.png') no-repeat top left;
|
||||
width: 27px;
|
||||
height: 27px;
|
||||
}
|
||||
.pager.next {
|
||||
display: inline-block;
|
||||
background: url('/UnsecureContent/images/buttons/btn-silver-right-27.png') no-repeat top left;
|
||||
width: 27px;
|
||||
height: 27px;
|
||||
}
|
||||
.page.text {
|
||||
position: relative;
|
||||
top: -8px;
|
||||
padding: 5px;
|
||||
*top:-4px;
|
||||
}
|
||||
.pager.previous:hover,
|
||||
.pager.next:hover {
|
||||
background-position: bottom left;
|
||||
cursor: pointer;
|
||||
}
|
||||
.pager.disabled,
|
||||
.pager.disabled:hover
|
||||
{
|
||||
background-position: 0px -27px;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.btn-group .btn-rightalone {
|
||||
margin-right: 3px;
|
||||
}
|
||||
|
||||
/* better paging */
|
||||
.paging-container-div-top
|
||||
{
|
||||
text-align: center;
|
||||
margin: 5px 0px 0px 0px;
|
||||
}
|
||||
.paging-container-div-top div
|
||||
{
|
||||
display:-moz-inline-stack;
|
||||
display:inline-block;
|
||||
zoom:1;
|
||||
*display:inline;
|
||||
}
|
||||
|
||||
.paging-input {
|
||||
width: 35px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* bootstrap override */
|
||||
.nav > li > a {
|
||||
padding: 2px 10px;
|
||||
}
|
||||
|
||||
.row {
|
||||
margin-right: 0px;
|
||||
margin-left: -0px;
|
||||
}
|
||||
|
||||
.dropdown-menu.service-buttons {
|
||||
min-width: 30px;
|
||||
}
|
||||
|
||||
.modal-danger {
|
||||
color: #ffffff;
|
||||
background-color: #d9534f;
|
||||
border-color: #d43f3a;
|
||||
}
|
||||
|
||||
.well-closest {
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
|
||||
.panel-closest {
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.row-separate {
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
|
||||
.ui-autocomplete{
|
||||
position: fixed;
|
||||
top: 100%;
|
||||
left: 0;
|
||||
z-index: 1051 !important;
|
||||
left: 0;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
/* end bootstrap override */
|
||||
|
||||
.no-padding {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#duo_iframe {
|
||||
border: none;
|
||||
width: 100%;
|
||||
/* ReSharper disable CssBrowserCompatibility */
|
||||
min-width: 304px;
|
||||
/* ReSharper restore CssBrowserCompatibility */
|
||||
max-width: 620px;
|
||||
height: 330px;
|
||||
display: block;
|
||||
margin-top: 50px;
|
||||
margin: 50px auto 0 auto;
|
||||
}
|
||||
|
||||
|
||||
#duo_form {
|
||||
display: none;
|
||||
}
|
||||
|
||||
div.navbar-fixed-top {
|
||||
min-height: 40px;
|
||||
margin-bottom: 5px;
|
||||
padding: 0;
|
||||
}
|
||||
a.navbar-brand, p.navbar-brand {
|
||||
height: 12px;
|
||||
padding: 1px 3px;
|
||||
margin: 0;
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
@media (min-width: 470px) {
|
||||
a.navbar-brand, p.navbar-brand {
|
||||
height: 25px;
|
||||
font-size: 16px;
|
||||
padding-top: 10px;
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
@media (min-width: 600px) {
|
||||
a.navbar-brand, p.navbar-brand {
|
||||
font-size: 18px;
|
||||
padding-top: 10px;
|
||||
}
|
||||
p.sign-out-link {
|
||||
float: right;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,492 @@
|
|||
body
|
||||
{
|
||||
font-family:Arial,Helvetica,sans-serif;
|
||||
font-size:13px;
|
||||
background: #FCFCFC;
|
||||
margin: 0;
|
||||
}
|
||||
div.header
|
||||
{
|
||||
margin:0 0 10px;
|
||||
background: #F0F0F0;
|
||||
text-align: right;
|
||||
padding: 5px;
|
||||
border-top: 2px solid #3679BC;
|
||||
height: 18px;
|
||||
}
|
||||
a
|
||||
{
|
||||
color: #095fb5;
|
||||
text-decoration: none;
|
||||
}
|
||||
a:hover
|
||||
{
|
||||
text-decoration: underline;
|
||||
}
|
||||
div.ContentPaneFloat
|
||||
{
|
||||
float:left;
|
||||
padding-left: 230px;
|
||||
min-height:500px;
|
||||
}
|
||||
div.NavigationPaneFloat
|
||||
{
|
||||
position:absolute;
|
||||
width:200px;
|
||||
border-right: 1px solid #F0F0F0;
|
||||
}
|
||||
div.NavigationPaneFloat .navSection
|
||||
{
|
||||
padding-left:10px;
|
||||
}
|
||||
div.NavigationPaneFloat ul
|
||||
{
|
||||
margin:0px;
|
||||
margin-bottom:10px;
|
||||
}
|
||||
div.navHeader
|
||||
{
|
||||
margin-bottom: 10px;
|
||||
margin-top: 15px;
|
||||
color: #999999;
|
||||
font-weight: bold;
|
||||
font-size: 15px;
|
||||
}
|
||||
h1
|
||||
{
|
||||
margin-top:35px;
|
||||
margin-bottom:12px;
|
||||
font-size: 40px;
|
||||
font-weight: bold;
|
||||
color:#363636;
|
||||
letter-spacing:-2px;
|
||||
}
|
||||
h2
|
||||
{
|
||||
font-size:16px;
|
||||
font-weight:bold;
|
||||
text-transform: uppercase;
|
||||
color:#000;
|
||||
}
|
||||
|
||||
|
||||
/* Legacy */
|
||||
.StandardTabWhite,
|
||||
.StandardTabGrayActive,
|
||||
.StandardTabGray
|
||||
{
|
||||
display:inline-block;
|
||||
height:26px;
|
||||
z-index: 2;
|
||||
position:relative;
|
||||
*display:inline;
|
||||
*zoom:1;
|
||||
}
|
||||
.StandardTabWhite span
|
||||
{
|
||||
*padding-right:14px;
|
||||
}
|
||||
.StandardTabGray
|
||||
{
|
||||
background-color: #b4cde9;
|
||||
margin-right: 4px;
|
||||
}
|
||||
li.ConfigTabs
|
||||
{
|
||||
padding: 6px 10px 0px 10px;
|
||||
}
|
||||
.StandardTabGrayActive
|
||||
{
|
||||
margin-right: 4px;
|
||||
}
|
||||
|
||||
.StandardTabGray a,
|
||||
.StandardTabGrayActive a
|
||||
{
|
||||
color: White;
|
||||
}
|
||||
.StandardTabGray a:hover,
|
||||
.StandardTabGrayActive a:hover
|
||||
{
|
||||
text-decoration:none;
|
||||
}
|
||||
|
||||
.StandardTabGray:hover,
|
||||
.StandardTabGrayActive
|
||||
{
|
||||
background-color: #6c98cb;
|
||||
color: White;
|
||||
}
|
||||
|
||||
div.Signin
|
||||
{
|
||||
margin: 0 auto;
|
||||
width: 198px;
|
||||
margin-top: 150px;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
div.Signin .formRow
|
||||
{
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
div.Signin .formRow label
|
||||
{
|
||||
display: block;
|
||||
}
|
||||
div.Signin .formRow input
|
||||
{
|
||||
border: 1px solid #999;
|
||||
padding: 3px;
|
||||
width: 190px;
|
||||
}
|
||||
|
||||
div.Signin .formRowSubmit
|
||||
{
|
||||
text-align: right;
|
||||
margin-top: 12px;
|
||||
}
|
||||
div.Signin .formRowSubmit input
|
||||
{
|
||||
border: 1px solid #999;
|
||||
padding: 3px 6px;
|
||||
border-radius: 3px;
|
||||
margin: 0;
|
||||
}
|
||||
div.Signin .formRowSubmit input:hover
|
||||
{
|
||||
cursor: pointer;
|
||||
background: white;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
div.header div.headerFloatLeft
|
||||
{
|
||||
float:left;
|
||||
}
|
||||
div.header div.headerFloatRight
|
||||
{
|
||||
float:right;
|
||||
}
|
||||
div#recaptcha_area
|
||||
{
|
||||
margin: 0 auto;
|
||||
margin-left: -40px;
|
||||
}
|
||||
|
||||
|
||||
/* mvc pages */
|
||||
|
||||
#GroupName {
|
||||
width: 550px;
|
||||
height: 20px;
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
|
||||
#NamePattern {
|
||||
width: 550px;
|
||||
height: 20px;
|
||||
}
|
||||
|
||||
#messageDiv {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* div containing lists of settings, maybe populated with ajax */
|
||||
.resultsContainer {
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.settingsTableCaption {
|
||||
padding: 3px;
|
||||
}
|
||||
|
||||
.settingsTable
|
||||
{
|
||||
border-collapse: collapse;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.settingsTable td {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.settingsTable td div
|
||||
{
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.infoMessage {
|
||||
display: inline-block;
|
||||
min-width: 40%;
|
||||
}
|
||||
|
||||
/* actions column -> anchor */
|
||||
.settingsTable .a a
|
||||
{
|
||||
color: #095fb5;
|
||||
}
|
||||
|
||||
/* name column */
|
||||
.settingsTable .n
|
||||
{
|
||||
width: 270px;
|
||||
}
|
||||
|
||||
/* Highlight results from filter*/
|
||||
.settingsTable .highlighted {
|
||||
font-weight: bold;
|
||||
background-color: lightgoldenrodyellow;
|
||||
}
|
||||
|
||||
/* value column */
|
||||
.settingsTable .valueCell {
|
||||
width: 300px;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
/* actual value */
|
||||
.settingsTable .value {
|
||||
width: 210px;
|
||||
float: left;
|
||||
}
|
||||
|
||||
/* icon div*/
|
||||
.settingsTable .copyValue {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.settingsTable .masked {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* icon */
|
||||
.settingsTable .copyToClipboardIcon {
|
||||
height: 15px;
|
||||
width: 15px;
|
||||
background-image: url("/UnsecureContent/images/Logo/clipboard.svg");
|
||||
background-size: 15px 15px;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center center;
|
||||
float: left;
|
||||
margin-left: 15px;
|
||||
}
|
||||
|
||||
/* secret value */
|
||||
.settingsTable .secret
|
||||
{
|
||||
color: red;
|
||||
}
|
||||
|
||||
/* show masked value button*/
|
||||
.settingsTable .ui-button .ui-button-text
|
||||
{
|
||||
line-height: 0.5;
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
/* connection string */
|
||||
.settingsTable .cs
|
||||
{
|
||||
width: 400px;
|
||||
}
|
||||
|
||||
/* comment column */
|
||||
.settingsTable .c {
|
||||
width: 280px;
|
||||
}
|
||||
|
||||
/* group column in connection strings */
|
||||
.settingsTable .g {
|
||||
width: 300px;
|
||||
}
|
||||
|
||||
/* group column trimmed */
|
||||
.settingsTable .gt {
|
||||
width: 200px;
|
||||
}
|
||||
|
||||
/* type column */
|
||||
.settingsTable .t {
|
||||
width: 110px;
|
||||
}
|
||||
|
||||
.settingsTable td,
|
||||
.settingsTable th {
|
||||
border: 1px solid #999999;
|
||||
}
|
||||
|
||||
.settingsTable td {
|
||||
padding: 4px;
|
||||
}
|
||||
|
||||
.settingsTable th {
|
||||
padding: 5px 4px;
|
||||
color: black;
|
||||
}
|
||||
|
||||
.settingsTable tr:hover {
|
||||
background-color: #DDDDDD
|
||||
}
|
||||
|
||||
.configDialog {
|
||||
display: none;
|
||||
}
|
||||
.configDialog input[type=text] {
|
||||
width: 400px;
|
||||
}
|
||||
|
||||
.configDialog .hiddenRow {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#settingsDialog .timeSpan input[type=text] {
|
||||
width: 70px;
|
||||
margin-right: 2px;
|
||||
}
|
||||
#settingsDialog .guid #guidInput1 {
|
||||
width: 75px;
|
||||
margin-right: 2px;
|
||||
}
|
||||
|
||||
#settingsDialog .guid #guidInput2,
|
||||
#settingsDialog .guid #guidInput3,
|
||||
#settingsDialog .guid #guidInput4 {
|
||||
width: 50px;
|
||||
margin-right: 2px;
|
||||
}
|
||||
|
||||
#settingsDialog .guid #guidInput5 {
|
||||
width: 110px;
|
||||
margin-right: 2px;
|
||||
}
|
||||
#settingsDialog .hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#settingsDialog table {
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
#settingsDialog input[type=text] {
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* Styles for validation helpers
|
||||
-----------------------------------------------------------*/
|
||||
.field-validation-error
|
||||
{
|
||||
color: #ff0000;
|
||||
}
|
||||
|
||||
.field-validation-valid
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
|
||||
.input-validation-error
|
||||
{
|
||||
border: 1px solid #ff0000 !important;
|
||||
background-color: #ffeeee;
|
||||
}
|
||||
|
||||
.validation-summary-errors
|
||||
{
|
||||
font-weight: bold;
|
||||
color: #ff0000;
|
||||
}
|
||||
|
||||
.validation-summary-valid
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** styles for services config pages begin ***/
|
||||
.authorization-column span,
|
||||
.authorization-column a {
|
||||
width: 50px;
|
||||
display: inline-block;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.authorization-column span.selected {
|
||||
font-weight: bold;
|
||||
background-color: #EDEDED;
|
||||
border-radius: 4px;
|
||||
}
|
||||
/** styles for services config pages end ***/
|
||||
|
||||
|
||||
|
||||
/*** client settings beging ***/
|
||||
#client-settings label {
|
||||
display: block;
|
||||
}
|
||||
#client-settings .add-top-margin {
|
||||
margin-top: 20px;
|
||||
}
|
||||
#client-settings #status-message {
|
||||
margin-left: 5px;
|
||||
}
|
||||
#client-settings input#setting-key {
|
||||
width: 602px;
|
||||
margin-bottom: 10px;
|
||||
display: block;
|
||||
}
|
||||
#client-settings textarea {
|
||||
width: 600px;
|
||||
height: 350px;
|
||||
margin-bottom: 10px;
|
||||
display: block;
|
||||
margin-top: 2px;
|
||||
}
|
||||
#client-settings table {
|
||||
border-spacing: 0;
|
||||
}
|
||||
#client-settings table td {
|
||||
padding: 0;
|
||||
vertical-align: top;
|
||||
}
|
||||
/*** client settings end ***/
|
||||
|
||||
|
||||
/*** regex start ***/
|
||||
a.edit-regex-link {
|
||||
margin-right: 10px;
|
||||
}
|
||||
.contentFilter {
|
||||
float: left;
|
||||
margin: 20px 20px 20px 0;
|
||||
max-width: 50%;
|
||||
}
|
||||
.margin-bottom {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
/*** regex ends ***/
|
||||
|
||||
#duo_iframe {
|
||||
border: none;
|
||||
width: 100%;
|
||||
/* ReSharper disable CssBrowserCompatibility */
|
||||
min-width: 304px;
|
||||
/* ReSharper restore CssBrowserCompatibility */
|
||||
max-width: 620px;
|
||||
height: 330px;
|
||||
display: block;
|
||||
margin-top: 50px;
|
||||
margin: 50px auto 0 auto;
|
||||
}
|
||||
|
||||
|
||||
#duo_form {
|
||||
display: none;
|
||||
}
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
.game-template {
|
||||
width: 150px;
|
||||
float: left;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.game-template a {
|
||||
width: 150px;
|
||||
height: 150px;
|
||||
display: block;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.game-template img {
|
||||
width: 150px;
|
||||
height: 150px;
|
||||
position: absolute;
|
||||
z-index: -1;
|
||||
}
|
||||
|
||||
.game-template .templateName {
|
||||
font-size: 13px;
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.game-template .removeTemplate {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.game-template.template {
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
#gameTemplatesList {
|
||||
float: left;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
|
||||
.error-message {
|
||||
color: red;
|
||||
font-weight: bold;
|
||||
font-size: 13px;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
.GenericForm .label {
|
||||
font-weight: bold;
|
||||
display: block;
|
||||
position: absolute;
|
||||
left: 0px;
|
||||
color: black;
|
||||
}
|
||||
.GenericForm .row {
|
||||
margin-bottom: 5px;
|
||||
position: relative;
|
||||
padding-left: 160px;
|
||||
}
|
||||
.GenericForm textarea {
|
||||
width: 300px;
|
||||
height: 100px;
|
||||
}
|
||||
.GenericForm .section {
|
||||
padding: 20px 0px;
|
||||
}
|
||||
.GenericForm .TopError
|
||||
{
|
||||
border: 1px solid red;
|
||||
padding: 2px;
|
||||
text-align: center;
|
||||
background: white;
|
||||
color: darkRed;
|
||||
margin: 5px;
|
||||
}
|
||||
|
||||
.makeLimitedBtn
|
||||
{
|
||||
border: 1px solid #CCC;
|
||||
padding: 2px;
|
||||
background: white;
|
||||
display: inline;
|
||||
}
|
||||
.makeLimitedBtn:hover {
|
||||
text-decoration: none;
|
||||
background: #eee;
|
||||
cursor: pointer;
|
||||
}
|
||||
.ImageDiv img {
|
||||
border: 1px solid #ccc;
|
||||
background: #fff;
|
||||
margin: 10px;
|
||||
}
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
.inputLabel
|
||||
{
|
||||
float: left;
|
||||
width: 100px;
|
||||
padding-top: 5px;
|
||||
}
|
||||
.MouseOver
|
||||
{
|
||||
background-color: yellow;
|
||||
}
|
||||
|
|
@ -0,0 +1,93 @@
|
|||
fieldset.AddMerchantBox {
|
||||
width:740px;
|
||||
margin: 10px 0px;
|
||||
}
|
||||
|
||||
button#AddMerchantButton {
|
||||
width:80px;float:right;
|
||||
}
|
||||
|
||||
input.merchantActiveInput {
|
||||
padding:20px;
|
||||
}
|
||||
|
||||
div#ErrorDiv {
|
||||
color: red;
|
||||
margin: 10px 0px;
|
||||
display:none;
|
||||
}
|
||||
|
||||
div#SuccessDiv {
|
||||
color: green;
|
||||
margin: 10px 0px;
|
||||
display:none;
|
||||
}
|
||||
|
||||
fieldset#MerchantList {
|
||||
width:740px;
|
||||
}
|
||||
|
||||
table#tableTemplate {
|
||||
display: none;
|
||||
}
|
||||
|
||||
tr#trTemplate {
|
||||
display:none;
|
||||
}
|
||||
|
||||
td.MerchID {
|
||||
width: 50px;
|
||||
}
|
||||
|
||||
td.MerchName {
|
||||
width: 210px;
|
||||
}
|
||||
|
||||
td.MerchActive {
|
||||
width: 50px;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
td.MerchCreated {
|
||||
width: 210px;
|
||||
}
|
||||
|
||||
td.MerchUpdated {
|
||||
width: 210px;
|
||||
}
|
||||
|
||||
td.merch-hidden {
|
||||
width:50px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
td.MerchCountry {
|
||||
width: 210px;
|
||||
}
|
||||
|
||||
td.MerchLocator {
|
||||
width: 210px;
|
||||
}
|
||||
|
||||
td.MerchImage {
|
||||
width: 210px;
|
||||
}
|
||||
|
||||
td.MerchEdit {
|
||||
width: 50px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
div#pager {
|
||||
margin-left:auto;
|
||||
margin-right:auto;
|
||||
margin-top:15px;
|
||||
height: 23px;
|
||||
text-align: center;
|
||||
display: none;
|
||||
padding: 3px 3px 3px 3px;
|
||||
}
|
||||
|
||||
div#NoMerchantDisplays {
|
||||
margin-top:100px;
|
||||
}
|
||||
|
After Width: | Height: | Size: 11 KiB |
|
|
@ -0,0 +1 @@
|
|||
html,body,p,code:before,table{margin:0;padding:0;font-family:Arial,Helvetica,sans-serif;font-size:13px;color:#111}html{height:100%;overflow:auto;-webkit-overflow-scrolling:touch}body{overflow:auto;-webkit-overflow-scrolling:touch;min-height:100%;word-wrap:break-word}ul,ol{margin-top:0;margin-bottom:0;padding-top:0;padding-bottom:0}table,td{border:1px dotted #000;empty-cells:show}code:before{position:absolute;content:'Code:';top:-1.35em;left:0}code{margin-top:1.5em;position:relative;background:#eee;border:1px solid #aaa;white-space:pre;padding:.25em}.ie6 code,.ie7 code{margin-top:0}code:before,code{display:block;text-align:left}blockquote{position:relative;background:#fff6c7;margin:.25em 0;border:1px solid #aaa;padding:.25em}blockquote cite{font-weight:bold;display:block;font-size:1em;border-bottom:1px solid #aaa}div{min-height:1em}h1,h2,h3,h4,h5,h6{padding:0;margin:0}
|
||||
|
|
@ -0,0 +1,56 @@
|
|||
.menu {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.menuitem {
|
||||
margin-right: 50px;
|
||||
}
|
||||
|
||||
.pixelType {
|
||||
font-weight: bold;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.deletePixel {
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.active-field {
|
||||
font-weight: normal;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
textarea {
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
.notes {
|
||||
color: red;
|
||||
}
|
||||
|
||||
.messages {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
table {
|
||||
margin: 20px;
|
||||
}
|
||||
|
||||
table, tr, td {
|
||||
border: 1px solid;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#NameCell {
|
||||
width: 250px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#SuppressedCell {
|
||||
font-weight: bold;
|
||||
width: 75px;
|
||||
}
|
||||
|
||||
fieldset {
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
table {
|
||||
margin: 20px;
|
||||
}
|
||||
|
||||
input[type='submit'] {
|
||||
margin-top: 15px;
|
||||
}
|
||||
|
||||
table, tr, td {
|
||||
border: 1px solid;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#NameCell {
|
||||
width: 250px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#ActiveCell {
|
||||
font-weight: bold;
|
||||
width: 75px;
|
||||
}
|
||||
|
|
@ -0,0 +1,148 @@
|
|||
.StandardDividerBottom {
|
||||
margin-bottom: 15px;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
|
||||
.form-create-price label {
|
||||
width: 150px;
|
||||
text-align: right;
|
||||
margin-right: 10px;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.form-create-price .input-group {
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
|
||||
.tableheader {
|
||||
font-weight: bold;
|
||||
margin-bottom: 2px;
|
||||
padding-bottom: 2px;
|
||||
height: 1em;
|
||||
display: table-header-group;
|
||||
}
|
||||
|
||||
.tableheader div {
|
||||
display: table-cell;
|
||||
margin-right: 2px;
|
||||
padding: 2px 2px;
|
||||
}
|
||||
|
||||
.table-row {
|
||||
display: table-row-group;
|
||||
}
|
||||
|
||||
.table-row .display-row {
|
||||
height: 26px;
|
||||
line-height: 26px;
|
||||
}
|
||||
|
||||
.table-row .display-row,
|
||||
.table-row .edit-row {
|
||||
display: table-row;
|
||||
}
|
||||
|
||||
.table-row div {
|
||||
margin-right: 2px;
|
||||
padding: 1px 2px;
|
||||
}
|
||||
|
||||
|
||||
.table-row .edit-row .input-group select,
|
||||
.table-row .edit-row .input-group input {
|
||||
width: inherit;
|
||||
}
|
||||
|
||||
.table-row div {
|
||||
display: table-cell;
|
||||
}
|
||||
|
||||
.table-row div [name='price'] {
|
||||
width: 150px;
|
||||
padding: 1px 0px;
|
||||
}
|
||||
|
||||
.table-row div [name='edit'],
|
||||
.table-row div [name='delete'],
|
||||
.table-row div [name='submit'],
|
||||
.table-row div [name='cancel'] {
|
||||
text-align: center;
|
||||
width: 50px;
|
||||
}
|
||||
|
||||
.table-row div a {
|
||||
color: #333333;
|
||||
text-align: center;
|
||||
width: 50px;
|
||||
}
|
||||
|
||||
.table-row div a:hover {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.table-grid {
|
||||
display: table;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#update-product-prices-panel {
|
||||
margin: 10px;
|
||||
}
|
||||
|
||||
.error-message {
|
||||
display: block;
|
||||
background-color: #FFBABA;
|
||||
color: #D8000C;
|
||||
margin: 10px;
|
||||
padding: 5px;
|
||||
border: #D8000C solid 1px;
|
||||
}
|
||||
|
||||
.error-message .icon {
|
||||
font-size: 20px;
|
||||
display: table-cell;
|
||||
vertical-align: middle;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.error-message .error-text {
|
||||
display: table-cell;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.scrollable-menu {
|
||||
height: auto;
|
||||
max-height: 400px;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
.form-control.dropdown,
|
||||
.form-control.text {
|
||||
display: inline-block;
|
||||
max-width: 300px
|
||||
}
|
||||
|
||||
.form-control.dropdown {
|
||||
margin-left: 4px;
|
||||
}
|
||||
|
||||
.form-create-price .form-group {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.product-sheet.container {
|
||||
padding-top: 15px;
|
||||
max-width: none;
|
||||
}
|
||||
|
||||
.product-sheet-submit {
|
||||
margin: 10px 0;
|
||||
}
|
||||
|
||||
.handsontable table thead th {
|
||||
white-space: pre-line;
|
||||
}
|
||||
|
||||
table.htCore tbody tr:nth-child(even) td {
|
||||
background-color: #f9f9f9;
|
||||
}
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
.Name {
|
||||
width: 200px;
|
||||
}
|
||||
.Status
|
||||
{
|
||||
width: 100px;
|
||||
}
|
||||
.Index.StandardDividerBottom {
|
||||
margin-top: 3px;
|
||||
margin-bottom: 10px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.GenericForm .label {
|
||||
font-weight: bold;
|
||||
display: block;
|
||||
position: absolute;
|
||||
left: 0px;
|
||||
}
|
||||
.GenericForm .row {
|
||||
margin-bottom: 5px;
|
||||
position: relative;
|
||||
padding-left: 160px;
|
||||
}
|
||||
.GenericForm textarea {
|
||||
width: 300px;
|
||||
height: 100px;
|
||||
}
|
||||
.item-name {
|
||||
width: 200px;
|
||||
display: block;
|
||||
float: left;
|
||||
}
|
||||
.item-order {
|
||||
width: 70px;
|
||||
}
|
||||
.item-order input {
|
||||
width: 50px;
|
||||
}
|
||||
.item-row {
|
||||
clear: both;
|
||||
}
|
||||
input.item-order-submit {
|
||||
position: relative;
|
||||
}
|
||||
.note {
|
||||
font-size: 11px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.GenericForm {
|
||||
width: 600px;
|
||||
}
|
||||
.StandardDividerTop {
|
||||
padding-top: 5px;
|
||||
}
|
||||
input.long {
|
||||
width: 300px;
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
#MarketingConfigOptions .selected {
|
||||
font-weight: bold;
|
||||
}
|
||||
#MarketingConfigOptions span:hover {
|
||||
cursor: pointer;
|
||||
}
|
||||
.country-option {
|
||||
float: left;
|
||||
width: 33%;
|
||||
}
|
||||
.age-textbox {
|
||||
width: 50px;
|
||||
}
|
||||
.generic-form {
|
||||
width: 600px;
|
||||
}
|
||||
.generic-form .label {
|
||||
font-weight: bold;
|
||||
display: block;
|
||||
position: absolute;
|
||||
left: 0px;
|
||||
}
|
||||
.generic-form .row {
|
||||
margin-bottom: 5px;
|
||||
position: relative;
|
||||
padding-left: 160px;
|
||||
}
|
||||
.takeover-message {
|
||||
background-color: #9BC4E2;
|
||||
border: 2px inset #0D4F8B;
|
||||
padding: 5px;
|
||||
margin-bottom: 5px;
|
||||
display: block;
|
||||
text-align: center;
|
||||
}
|
||||
|
|
@ -0,0 +1,448 @@
|
|||
<?php
|
||||
include_once $_SERVER["DOCUMENT_ROOT"] . '/global.php';
|
||||
$user = new PublicUser();
|
||||
if ($user == false) {
|
||||
die(Redirect("http://" . $_SERVER['SERVER_NAME'] . "/RobloxDefaultErrorPage.aspx"));
|
||||
}
|
||||
//checks if user is admin
|
||||
$badges = json_decode($user->Badges, true);
|
||||
//if (verify_user() !== true and $user->Name == "dreamer") {die("dreamer moment");}
|
||||
if (verify_user() !== true or in_array(1, $badges["Badges"]) !== true/*$user->MembershipLevel < 3*/) {
|
||||
die(Redirect("http://" . $_SERVER['SERVER_NAME'] . "/RobloxDefaultErrorPage.aspx?code=403"));
|
||||
}
|
||||
|
||||
//moved up here since this involves header changes
|
||||
if (isset($_POST['upload'])) {
|
||||
$uploadOK = false;
|
||||
$type = $_POST['type'];
|
||||
$forsale = $_POST['forsale'];
|
||||
if ($forsale == true) {
|
||||
$forsale = 1;}else{
|
||||
$forsale = 0;}
|
||||
$currency = $_POST['currency'];
|
||||
if ($type !== 4) {
|
||||
$price = $_POST['price'];
|
||||
}
|
||||
$description = $_POST['description'];
|
||||
$title = $_POST['title'];
|
||||
//check here if user is admin
|
||||
$dbtype = $type;
|
||||
$title = preg_replace("/[^ \w]+/", "", $title);
|
||||
$title = preg_replace('!\s+!', ' ', $title);
|
||||
$description = preg_replace('!\s+!', ' ', $description);
|
||||
if (strlen($title) > 36) {
|
||||
header("Location: /Admi/Economy/NewProduct.aspx?error=2");
|
||||
|
||||
exit;
|
||||
}
|
||||
if (strlen($title) < 1) {
|
||||
header("Location: /Admi/Economy/NewProduct.aspx?error=5");
|
||||
|
||||
exit;
|
||||
}
|
||||
if (strlen($description) > 800) {
|
||||
header("Location: /Admi/Economy/NewProduct.aspx?error=1");
|
||||
|
||||
exit;
|
||||
}
|
||||
if ($price < 0 and $dbtype !== 13) {
|
||||
header("Location: /Admi/Economy/NewProduct.aspx?error=4");
|
||||
|
||||
exit;
|
||||
}
|
||||
if ($price > 99999 and $dbtype !== 13) {
|
||||
header("Location: /Admi/Economy/NewProduct.aspx?error=3");
|
||||
|
||||
exit;
|
||||
}
|
||||
if ($dbtype == 13) {
|
||||
$price = 0;
|
||||
}
|
||||
}
|
||||
|
||||
function newAssetId() {
|
||||
global $database;
|
||||
//$query = "SELECT * FROM asset WHERE AssetTypeId=".$dbtype." ORDER BY AssetId DESC LIMIT 1;";
|
||||
$query = "SELECT * FROM asset ORDER BY AssetId DESC LIMIT 1;";
|
||||
$execute = $database->query($query);
|
||||
if ($execute !== false) {
|
||||
//$final = $execute->fetchAll();
|
||||
$result = $execute->fetch(PDO::FETCH_ASSOC);
|
||||
//die(print_r($result));
|
||||
}else {
|
||||
return false;
|
||||
}
|
||||
if (!is_array($result)) {
|
||||
$assetId = 1;
|
||||
}else{
|
||||
$assetId = $result['AssetId']+1;
|
||||
while (file_exists($_SERVER["DOCUMENT_ROOT"].'/Asset/'.$assetId)) {
|
||||
$assetId = $assetId+1;
|
||||
}
|
||||
}
|
||||
return $assetId;
|
||||
}
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head id="ctl00_Head1">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,requiresActiveX=true"/><title>
|
||||
Upload - ROBLONIUM
|
||||
</title>
|
||||
<link rel="icon" type="image/vnd.microsoft.icon" href="/favicon.ico"/><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><meta http-equiv="Content-Language" content="en-us"/>
|
||||
<?php include $_SERVER["DOCUMENT_ROOT"] . "/puzzle/ScriptGlobals.php";?>
|
||||
<style>
|
||||
input[type=text], select, input[type=password],input[type=email],input[type=number],textarea {
|
||||
width: 100%;
|
||||
padding: 5px 15px;
|
||||
margin: 8px 0;
|
||||
display: inline-block;
|
||||
border: 1px solid #ccc;
|
||||
border-radius: 4px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
input[type=submit] {
|
||||
width: 100%;
|
||||
background-color: #4CAF50;
|
||||
color: white;
|
||||
padding: 15px 25px;
|
||||
margin: 8px 0;
|
||||
border: none;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
input[type=submit]:hover {
|
||||
background-color: #45a049;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="MasterContainer">
|
||||
|
||||
|
||||
|
||||
<script type="text/javascript">
|
||||
$(function(){
|
||||
function trackReturns() {
|
||||
function dayDiff(d1, d2) {
|
||||
return Math.floor((d1-d2)/86400000);
|
||||
}
|
||||
|
||||
var cookieName = 'RBXReturn';
|
||||
var cookieOptions = {expires:9001};
|
||||
var cookie = $.getJSONCookie(cookieName);
|
||||
|
||||
if (typeof cookie.ts === "undefined" || isNaN(new Date(cookie.ts))) {
|
||||
$.setJSONCookie(cookieName, { ts: new Date().toDateString() }, cookieOptions);
|
||||
return;
|
||||
}
|
||||
|
||||
var daysSinceFirstVisit = dayDiff(new Date(), new Date(cookie.ts));
|
||||
if (daysSinceFirstVisit == 1 && typeof cookie.odr === "undefined") {
|
||||
RobloxEventManager.triggerEvent('rbx_evt_odr', {});
|
||||
cookie.odr = 1;
|
||||
}
|
||||
if (daysSinceFirstVisit >= 1 && daysSinceFirstVisit <= 7 && typeof cookie.sdr === "undefined") {
|
||||
RobloxEventManager.triggerEvent('rbx_evt_sdr', {});
|
||||
cookie.sdr = 1;
|
||||
}
|
||||
|
||||
$.setJSONCookie(cookieName, cookie, cookieOptions);
|
||||
}
|
||||
|
||||
|
||||
RobloxListener.restUrl = window.location.protocol + "//" + "<?=$_SERVER['SERVER_NAME']?>/Game/EventTracker.ashx";
|
||||
RobloxListener.init();
|
||||
|
||||
|
||||
GoogleListener.init();
|
||||
|
||||
|
||||
|
||||
|
||||
RobloxEventManager.initialize(true);
|
||||
RobloxEventManager.triggerEvent('rbx_evt_pageview');
|
||||
trackReturns();
|
||||
|
||||
|
||||
|
||||
RobloxEventManager._idleInterval = 450000;
|
||||
RobloxEventManager.registerCookieStoreEvent('rbx_evt_initial_install_start');
|
||||
RobloxEventManager.registerCookieStoreEvent('rbx_evt_ftp');
|
||||
RobloxEventManager.registerCookieStoreEvent('rbx_evt_initial_install_success');
|
||||
RobloxEventManager.registerCookieStoreEvent('rbx_evt_fmp');
|
||||
RobloxEventManager.startMonitor();
|
||||
|
||||
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
|
||||
<script type="text/javascript">Roblox.FixedUI.gutterAdsEnabled=false;</script>
|
||||
|
||||
|
||||
<?php include $_SERVER["DOCUMENT_ROOT"] . '/Banner' ;?>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<noscript><div class="SystemAlert"><div class="SystemAlertText">Please enable Javascript to use all the features on this site.</div></div></noscript>
|
||||
<?php
|
||||
if (isset($_GET['error'])) {
|
||||
$id = $_GET['error'];
|
||||
if ($id == 1) {
|
||||
echo alert('Your description is too long!', '#dada01');
|
||||
}elseif($id == 2) {
|
||||
echo alert('Your asset name is too long!', '#dada01');
|
||||
}elseif($id == 3) {
|
||||
echo alert('Your asset price cannot be higher than <span class="robux money">99999</span>.', '#dada01');
|
||||
}elseif($id == 4) {
|
||||
echo alert('Your asset price cannot be lower than <span class="robux money">0</span>.', '#dada01');
|
||||
}elseif($id == 5) {
|
||||
echo alert('Your asset name must be at least 1 character in length.', '#dada01');
|
||||
}elseif($id == 6) {
|
||||
echo alert('Illegal character has been detected!', 'red');
|
||||
}
|
||||
}
|
||||
?>
|
||||
<div id="BodyWrapper">
|
||||
<div id="RepositionBody">
|
||||
<div id="Body" style="width:970px; padding: 5px 0 80px 0;">
|
||||
<div class="row">
|
||||
<div class="col-xs-8">
|
||||
<div class="divider-right" style="width: 484px; float: left; padding-left: 0.2in;">
|
||||
<h2 class="title">
|
||||
<span>Upload</span>
|
||||
</h2>
|
||||
<div class="panel-body">
|
||||
<form method="post" enctype="multipart/form-data">
|
||||
Name:<br>
|
||||
<input type="text" name="title" maxlength="36" class="form-control" style="width:3in;">
|
||||
<br>
|
||||
Description:<br>
|
||||
<textarea name="description" maxlength="800" class="form-control" rows="10" style="width:3in;"></textarea>
|
||||
<br>
|
||||
Price: For Sale
|
||||
<br>
|
||||
<input type="number" name="price" maxlength="5" class="form-control" style="width:2.7in;"><input type="checkbox" name="forsale" class="form-control" style="width:0.2in;">
|
||||
<br>
|
||||
Currency:
|
||||
<br>
|
||||
<input type="radio" name="currency" value="1" class="form-control" style="width:0.2in;">
|
||||
<span class="robux money">Robux</span>
|
||||
<input type="radio" name="currency" value="2" class="form-control" style="width:0.2in;">
|
||||
<span class="tickets money">Tix</span>
|
||||
<br>
|
||||
Type:<br>
|
||||
<select name="type" style="width:3in;">
|
||||
<?php
|
||||
if($user->Id == 1) {echo(' <option value="0">Product</option>
|
||||
<option value="1">Image</option>
|
||||
<option value="2">T-Shirt</option>
|
||||
<option value="3">Audio</option>
|
||||
<option value="4">Mesh</option>
|
||||
<option value="5">Lua</option>
|
||||
<option value="6">HTML</option>
|
||||
<option value="7">Text</option>
|
||||
<option value="8">Hat</option>
|
||||
<option value="9">Place</option>
|
||||
<option value="10">Model</option>
|
||||
<option value="11">Shirt</option>
|
||||
<option value="12">Pants</option>
|
||||
<option value="13">Decal</option>
|
||||
<option value="16">Avatar</option>
|
||||
<option value="17">Head</option>
|
||||
<option value="18">Face</option>
|
||||
<option value="19">Gear</option>
|
||||
<option value="21">Badge</option>
|
||||
<option value="22">Group Emblem</option>
|
||||
<option value="24">Animation</option>
|
||||
<option value="25">Arms</option>
|
||||
<option value="26">Legs</option>
|
||||
<option value="27">Torso</option>
|
||||
<option value="28">Right Arm</option>
|
||||
<option value="29">Left Arm</option>
|
||||
<option value="42">Left Leg</option>
|
||||
<option value="31">Right Leg</option>
|
||||
<option value="32">Package</option>
|
||||
<option value="33">YouTube Video</option>
|
||||
<option value="34">Game Pass</option>');
|
||||
}else{echo(' <option value="1">Image</option>
|
||||
<option value="2">T-Shirt</option>
|
||||
<option value="3">Audio</option>
|
||||
<!--option value="4">Mesh</option-->
|
||||
<option value="8">Hat</option>
|
||||
<option value="10">Model</option>
|
||||
<option value="11">Shirt</option>
|
||||
<option value="12">Pants</option>
|
||||
<option value="13">Decal</option>
|
||||
<option value="18">Face</option>
|
||||
<option value="19">Gear</option>
|
||||
<option value="24">Animation</option>');
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
<br>
|
||||
<p style="display:inline;">
|
||||
File:<br>
|
||||
<input style="display:inline;" type="file" name="file">
|
||||
</p>
|
||||
<br><br>
|
||||
<button type="submit" name="upload" name="upload" class="btn-medium btn-primary btn-level-element " style="padding: 4px 13px 1px 13px; height: 33px;">Upload<span class="btn-text">Upload</span></button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="divider-left" style="width: 420px; float: right; align-self: center; border-left: 0px; padding-right: 0.2in;">
|
||||
<h2 class="title" style="margin-bottom: 0px;">
|
||||
<span>Uploading Info</span>
|
||||
</h2>
|
||||
<pre class="Description body text">This is where you can upload assets such as T-Shirts, Decals, and Pants. Uploading an asset costs <span class="robux money">20</span>. You'll need to wait for your asset to be approved before you can use it. If a moderator decides that your asset is against our terms of service, they have every right to delete your asset without compensation.</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
if (isset($_POST['upload'])) {
|
||||
//moved up to prevent headers from being prematurely sent
|
||||
$assetId = newAssetId();
|
||||
if ($assetId !== false) {
|
||||
$target_dir = $_SERVER["DOCUMENT_ROOT"]."/assets/";
|
||||
$target_file = $target_dir.$assetId;
|
||||
$check = @getimagesize($_FILES["file"]["tmp_name"]);
|
||||
list($width, $height) = @getimagesize($_FILES["file"]["tmp_name"]);
|
||||
/*if ($auth_uid == 11) {
|
||||
echo '<script>alert("'.$width.'");</script>';
|
||||
echo '<script>alert("'.$height.'");</script>';
|
||||
}*/
|
||||
if ($width != 580 and $height != 556) {
|
||||
if ($dbtype == 11 or $dbtype == 12) {
|
||||
$uploadOK = false;
|
||||
}
|
||||
}
|
||||
$uploadOK = true;
|
||||
if ($check == false and ($dbtype == 11 or $dbtype == 12 or $dbtype == 13 or $dbtype == 2 or $dbtype == 1)) {
|
||||
echo('<br>' . alert('The file you tried to upload is not an image.', '#dada01') . '<br>');
|
||||
$uploadOK = false;
|
||||
}else{
|
||||
/*if ($dbtype !== 11 and $dbtype !== 12 and $dbtype !== 13 and $dbtype !== 2 and $dbtype !== 1) {
|
||||
$xml=simplexml_load_string(file_get_contents($target_file));
|
||||
if ($xml === false) {
|
||||
echo('<br>' . alert("The asset you tried to upload isn't in XML format. (It's too new)", '#dada01') . '<br>');
|
||||
$uploadOK = false;
|
||||
}
|
||||
}*/
|
||||
$imageFileType = pathinfo($_FILES['file']["name"], PATHINFO_EXTENSION);
|
||||
if ($_FILES["file"]["size"] > 30000000) {
|
||||
echo('<br>' . alert('The file you tried to upload is greater than 30 MB.', '#dada01') . '<br>');
|
||||
$uploadOK = false;
|
||||
}else{
|
||||
$finfo = finfo_open(FILEINFO_MIME_TYPE);
|
||||
$mime = finfo_file($finfo, $_FILES['file']['tmp_name']);
|
||||
if (($dbtype == 11 or $dbtype == 12 or $dbtype == 13 or $dbtype == 2 or $dbtype == 1) && $imageFileType != "jpg" && $imageFileType != "JPG" && $imageFileType != "png" && $imageFileType != "PNG" && $imageFileType != "jpeg" && $imageFileType != "JPEG" && $mime != "image/png" && $mime != "image/jpeg") {
|
||||
//echo 'The file you tried to upload is not allowed. Only JPG, JPEG and PNG are allowed.';
|
||||
echo('<br>' . alert('The file you tried to upload is not allowed.', '#dada01') . '<br>');
|
||||
$uploadOK = false;
|
||||
}else{
|
||||
if ($user->Robux < 0) {
|
||||
echo('<br>' . alert('You do not have enough ROBUX. :(', '#dada01') . '<br>');
|
||||
}else{
|
||||
if ($uploadOK == true) {
|
||||
if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_file)) {
|
||||
//$user->Robux = $user->Robux-20;
|
||||
$userinfo = $database->updateRow("public_users", [ // update code in secondary database
|
||||
"Robux" => $user->Robux
|
||||
], ["Id" => $user->Id]);
|
||||
|
||||
if (isset($imageReliantAssetTypes[$dbtype])) {
|
||||
$database->insertRow("asset", [ // upload secondary asset
|
||||
"Name" => $title,
|
||||
"Description" => assetTypeToString($dbtype)." Image",
|
||||
"PriceInRobux" => 0,
|
||||
"PriceInTickets" => 0,
|
||||
"IsForSale" => 0,
|
||||
"AssetTypeId" => 1,
|
||||
"CreatorId" => $user->Id,
|
||||
"AssetId" => $assetId,
|
||||
], "AssetId");
|
||||
giveItem($user->Id, $assetId); //give the owner the texture
|
||||
//the texture has been uploaded now to upload the user's requested asset...
|
||||
//handle the asset that the user was trying to upload rather than the texture
|
||||
$processedAsset = processAsset($dbtype, array('http://sitetest1.roblonium.com/asset/?id='.$assetId)); //append the proper text to the asset
|
||||
$assetId = newAssetId(); //generate a new asset id
|
||||
$target_file = $target_dir.$assetId; //generate a new target file for the requested asset
|
||||
if ($processedAsset !== false) {
|
||||
file_put_contents($target_file, $processedAsset); //upload the user's requested asset
|
||||
}
|
||||
}
|
||||
|
||||
if ($currency == 2) {
|
||||
$newasset = $database->insertRow("asset", [ // upload asset with Tickets currency
|
||||
"Name" => $title,
|
||||
"Description" => $description,
|
||||
"PriceInRobux" => 0,
|
||||
"PriceInTickets" => $price,
|
||||
"IsForSale" => $forsale,
|
||||
"AssetTypeId" => $dbtype,
|
||||
"CreatorId" => $user->Id,
|
||||
"AssetId" => $assetId,
|
||||
], "AssetId");
|
||||
|
||||
}else {
|
||||
$newasset = $database->insertRow("asset", [ // upload asset with Robux currency
|
||||
"Name" => $title,
|
||||
"Description" => $description,
|
||||
"PriceInRobux" => $price,
|
||||
"PriceInTickets" => 0,
|
||||
"IsForSale" => $forsale,
|
||||
"AssetTypeId" => $dbtype,
|
||||
"CreatorId" => $user->Id,
|
||||
"AssetId" => $assetId,
|
||||
], "AssetId");
|
||||
}
|
||||
|
||||
echo('<br>' . alert('Asset successfully uploaded!', 'green') . '<br>');
|
||||
/*//ping thumbnail to start rendering
|
||||
file_get_contents('http://'.$_SERVER['SERVER_NAME'].'/Game/Tools/ThumbnailAsset.ashx?aid='.$assetId.'&fmt=png&wd=320&ht=320');
|
||||
*/
|
||||
giveItem($user->Id, $assetId);
|
||||
echo(' <script type="text/javascript">
|
||||
|
||||
window.parent.location = "/Item.aspx?id='.$assetId.'";
|
||||
</script>');
|
||||
|
||||
}else{
|
||||
if ($_FILES['file']['error'] == 1) {
|
||||
echo('<br>' . alert('[The uploaded file size exceeds the file size limit.]', 'red') . '<br>');
|
||||
} else{
|
||||
echo('<br>' . alert('An error occurred while uploading. Please try again soon! ['.$_FILES['file']['error'].']', 'red') . '<br>');
|
||||
}
|
||||
}
|
||||
}else{
|
||||
echo('<br>' . alert('Could not upload your file. Are you using the correct template?', '#dada01') . '<br>');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}else{
|
||||
echo('<br>' . alert('Critical Error!', 'red') . '<br>');
|
||||
}
|
||||
}else{
|
||||
echo('<br>' . alert('Fill in the fields above and press upload to upload an asset.', 'black') . '<br>');
|
||||
}
|
||||
?>
|
||||
|
||||
<?php include $_SERVER["DOCUMENT_ROOT"] . "/Footer";?>
|
||||
</div>
|
||||
<?php include $_SERVER["DOCUMENT_ROOT"] . "/puzzle/Post-Footer.php";?>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
<roblox xmlns:xmime="http://www.w3.org/2005/05/xmlmime" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.roblox.com/roblox.xsd" version="4">
|
||||
<External>null</External>
|
||||
<External>nil</External>
|
||||
<Item class="Decal" referent="RBX0">
|
||||
<Properties>
|
||||
<token name="Face">5</token>
|
||||
<string name="Name">face</string>
|
||||
<float name="Shiny">20</float>
|
||||
<float name="Specular">0</float>
|
||||
<Content name="Texture"><url><<<<<Domain>>>>>/asset/?id=<<<<<ImageAssetID>>>>></url></Content>
|
||||
<bool name="archivable">true</bool>
|
||||
</Properties>
|
||||
</Item>
|
||||
</roblox>
|
||||
|
|
@ -0,0 +1,99 @@
|
|||
<roblox xmlns:xmime="http://www.w3.org/2005/05/xmlmime" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.roblox.com/roblox.xsd" version="4">
|
||||
<External>null</External>
|
||||
<External>nil</External>
|
||||
<Item class="Tool" referent="RBX0">
|
||||
<Properties>
|
||||
<bool name="Enabled">true</bool>
|
||||
<CoordinateFrame name="Grip">
|
||||
<X>0</X>
|
||||
<Y>0</Y>
|
||||
<Z>0</Z>
|
||||
<R00>0</R00>
|
||||
<R01>0</R01>
|
||||
<R02>1</R02>
|
||||
<R10>0</R10>
|
||||
<R11>1</R11>
|
||||
<R12>-0</R12>
|
||||
<R20>-1</R20>
|
||||
<R21>0</R21>
|
||||
<R22>0</R22>
|
||||
</CoordinateFrame>
|
||||
<string name="Name"><<<<<Name>>>>></string>
|
||||
<Content name="TextureId"><url><<<<<ToolboxIconURL>>>>></url></Content>
|
||||
<bool name="archivable">true</bool>
|
||||
</Properties>
|
||||
<Item class="Part" referent="RBX2">
|
||||
<Properties>
|
||||
<bool name="Anchored">false</bool>
|
||||
<float name="BackParamA">-0.5</float>
|
||||
<float name="BackParamB">0.5</float>
|
||||
<token name="BackSurface">0</token>
|
||||
<token name="BackSurfaceInput">0</token>
|
||||
<float name="BottomParamA">-0.5</float>
|
||||
<float name="BottomParamB">0.5</float>
|
||||
<token name="BottomSurface">0</token>
|
||||
<token name="BottomSurfaceInput">0</token>
|
||||
<int name="BrickColor">199</int>
|
||||
<CoordinateFrame name="CFrame">
|
||||
<X>33</X>
|
||||
<Y>3</Y>
|
||||
<Z>0.5</Z>
|
||||
<R00>0</R00>
|
||||
<R01>0</R01>
|
||||
<R02>-1</R02>
|
||||
<R10>0</R10>
|
||||
<R11>1</R11>
|
||||
<R12>-0</R12>
|
||||
<R20>1</R20>
|
||||
<R21>0</R21>
|
||||
<R22>-0</R22>
|
||||
</CoordinateFrame>
|
||||
<bool name="CanCollide">true</bool>
|
||||
<bool name="DraggingV1">false</bool>
|
||||
<float name="Elasticity">0.5</float>
|
||||
<token name="FormFactor">2</token>
|
||||
<float name="Friction">0.300000012</float>
|
||||
<float name="FrontParamA">-0.5</float>
|
||||
<float name="FrontParamB">0.5</float>
|
||||
<token name="FrontSurface">0</token>
|
||||
<token name="FrontSurfaceInput">0</token>
|
||||
<float name="LeftParamA">-0.5</float>
|
||||
<float name="LeftParamB">0.5</float>
|
||||
<token name="LeftSurface">0</token>
|
||||
<token name="LeftSurfaceInput">0</token>
|
||||
<bool name="Locked">true</bool>
|
||||
<token name="Material">256</token>
|
||||
<string name="Name">Handle</string>
|
||||
<float name="Reflectance">0</float>
|
||||
<float name="RightParamA">-0.5</float>
|
||||
<float name="RightParamB">0.5</float>
|
||||
<token name="RightSurface">0</token>
|
||||
<token name="RightSurfaceInput">0</token>
|
||||
<Vector3 name="RotVelocity">
|
||||
<X>0</X>
|
||||
<Y>0</Y>
|
||||
<Z>0</Z>
|
||||
</Vector3>
|
||||
<float name="TopParamA">-0.5</float>
|
||||
<float name="TopParamB">0.5</float>
|
||||
<token name="TopSurface">0</token>
|
||||
<token name="TopSurfaceInput">0</token>
|
||||
<float name="Transparency">0</float>
|
||||
<Vector3 name="Velocity">
|
||||
<X>0</X>
|
||||
<Y>0</Y>
|
||||
<Z>0</Z>
|
||||
</Vector3>
|
||||
<bool name="archivable">true</bool>
|
||||
<token name="shape">1</token>
|
||||
<Vector3 name="size">
|
||||
<X>1</X>
|
||||
<Y>2</Y>
|
||||
<Z>2</Z>
|
||||
</Vector3>
|
||||
</Properties>
|
||||
<<<<<Meshes>>>>>
|
||||
<<<<<Sounds>>>>>
|
||||
</Item>
|
||||
</Item>
|
||||
</roblox>
|
||||
|
|
@ -0,0 +1,96 @@
|
|||
<roblox xmlns:xmime="http://www.w3.org/2005/05/xmlmime" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.roblox.com/roblox.xsd" version="4">
|
||||
<External>null</External>
|
||||
<External>nil</External>
|
||||
<Item class="Hat" referent="RBX0">
|
||||
<Properties>
|
||||
<CoordinateFrame name="AttachmentPoint">
|
||||
<X>0</X>
|
||||
<Y>0</Y>
|
||||
<Z>0</Z>
|
||||
<R00>1</R00>
|
||||
<R01>0</R01>
|
||||
<R02>-0</R02>
|
||||
<R10>-0</R10>
|
||||
<R11>1</R11>
|
||||
<R12>0</R12>
|
||||
<R20>0</R20>
|
||||
<R21>-0</R21>
|
||||
<R22>1</R22>
|
||||
</CoordinateFrame>
|
||||
<string name="Name"><<<<<Name>>>>></string>
|
||||
<bool name="archivable">true</bool>
|
||||
</Properties>
|
||||
<Item class="Part" referent="RBX1">
|
||||
<Properties>
|
||||
<bool name="Anchored">false</bool>
|
||||
<float name="BackParamA">-0.5</float>
|
||||
<float name="BackParamB">0.5</float>
|
||||
<token name="BackSurface">0</token>
|
||||
<token name="BackSurfaceInput">0</token>
|
||||
<float name="BottomParamA">-0.5</float>
|
||||
<float name="BottomParamB">0.5</float>
|
||||
<token name="BottomSurface">0</token>
|
||||
<token name="BottomSurfaceInput">0</token>
|
||||
<int name="BrickColor">194</int>
|
||||
<CoordinateFrame name="CFrame">
|
||||
<X>-43.993679</X>
|
||||
<Y>3.99712181</Y>
|
||||
<Z>-8.58395958</Z>
|
||||
<R00>0.999751627</R00>
|
||||
<R01>-5.25372174e-021</R01>
|
||||
<R02>-0.0222777594</R02>
|
||||
<R10>5.26573444e-021</R10>
|
||||
<R11>1</R11>
|
||||
<R12>4.80515498e-022</R12>
|
||||
<R20>0.0222777594</R20>
|
||||
<R21>-5.97705948e-022</R21>
|
||||
<R22>0.999751627</R22>
|
||||
</CoordinateFrame>
|
||||
<bool name="CanCollide">true</bool>
|
||||
<bool name="DraggingV1">false</bool>
|
||||
<float name="Elasticity">0.5</float>
|
||||
<token name="FormFactor">2</token>
|
||||
<float name="Friction">0.300000012</float>
|
||||
<float name="FrontParamA">-0.5</float>
|
||||
<float name="FrontParamB">0.5</float>
|
||||
<token name="FrontSurface">0</token>
|
||||
<token name="FrontSurfaceInput">0</token>
|
||||
<float name="LeftParamA">-0.5</float>
|
||||
<float name="LeftParamB">0.5</float>
|
||||
<token name="LeftSurface">0</token>
|
||||
<token name="LeftSurfaceInput">0</token>
|
||||
<bool name="Locked">true</bool>
|
||||
<token name="Material">256</token>
|
||||
<string name="Name">Handle</string>
|
||||
<float name="Reflectance">0</float>
|
||||
<float name="RightParamA">-0.5</float>
|
||||
<float name="RightParamB">0.5</float>
|
||||
<token name="RightSurface">0</token>
|
||||
<token name="RightSurfaceInput">0</token>
|
||||
<Vector3 name="RotVelocity">
|
||||
<X>0</X>
|
||||
<Y>0</Y>
|
||||
<Z>0</Z>
|
||||
</Vector3>
|
||||
<float name="TopParamA">-0.5</float>
|
||||
<float name="TopParamB">0.5</float>
|
||||
<token name="TopSurface">0</token>
|
||||
<token name="TopSurfaceInput">0</token>
|
||||
<float name="Transparency">0</float>
|
||||
<Vector3 name="Velocity">
|
||||
<X>0</X>
|
||||
<Y>0</Y>
|
||||
<Z>0</Z>
|
||||
</Vector3>
|
||||
<bool name="archivable">true</bool>
|
||||
<token name="shape">1</token>
|
||||
<Vector3 name="size">
|
||||
<X>2</X>
|
||||
<Y>0.800000012</Y>
|
||||
<Z>2</Z>
|
||||
</Vector3>
|
||||
</Properties>
|
||||
<<<<<Meshes>>>>>
|
||||
</Item>
|
||||
</Item>
|
||||
</roblox>
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
<Item class="SpecialMesh" referent="RBX2">
|
||||
<Properties>
|
||||
<token name="LODX">2</token>
|
||||
<token name="LODY">2</token>
|
||||
<Content name="MeshId"><url><<<<<Domain>>>>>/asset/?id=<<<<<MeshAssetID>>>>></url></Content>
|
||||
<token name="MeshType">5</token>
|
||||
<string name="Name">Mesh</string>
|
||||
<Vector3 name="Offset">
|
||||
<X>0</X>
|
||||
<Y>0</Y>
|
||||
<Z>0</Z>
|
||||
</Vector3>
|
||||
<Vector3 name="Scale">
|
||||
<X>1</X>
|
||||
<Y>1</Y>
|
||||
<Z>1</Z>
|
||||
</Vector3>
|
||||
<Content name="TextureId"><url><<<<<TextureAssetURL>>>>></url></Content>
|
||||
<Vector3 name="VertexColor">
|
||||
<X>1</X>
|
||||
<Y>1</Y>
|
||||
<Z>1</Z>
|
||||
</Vector3>
|
||||
<bool name="archivable">true</bool>
|
||||
</Properties>
|
||||
</Item>
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
<Item class="Sound" referent="RBX0">
|
||||
<Properties>
|
||||
<bool name="Looped">false</bool>
|
||||
<string name="Name"><<<<<Name>>>>></string>
|
||||
<float name="Pitch">1</float>
|
||||
<int name="PlayCount">-1</int>
|
||||
<bool name="PlayOnRemove">false</bool>
|
||||
<Content name="SoundId"><url><<<<<Domain>>>>>/asset/?id=<<<<<SoundAssetID>>>>></url></Content>
|
||||
<float name="Volume">1</float>
|
||||
<bool name="archivable">true</bool>
|
||||
</Properties>
|
||||
</Item>
|
||||
|
|
@ -0,0 +1,114 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Roblox;
|
||||
using Roblox.Caching;
|
||||
using Roblox.Common;
|
||||
using Roblox.Data.Interfaces;
|
||||
|
||||
namespace <NAMESPACE>
|
||||
{
|
||||
internal class <BIZCLASSNAME> : IRobloxEntity<<IDTYPE>, <CLASSNAME>> <BIZREMOTECACHEABLE>
|
||||
{
|
||||
private <CLASSNAME> _EntityDAL;
|
||||
|
||||
public <IDTYPE> ID
|
||||
{
|
||||
get { return _EntityDAL.ID; }
|
||||
}
|
||||
|
||||
<BIZPROPERTIES>
|
||||
|
||||
public <BIZCLASSNAME>()
|
||||
{
|
||||
_EntityDAL = new <CLASSNAME>();
|
||||
}
|
||||
|
||||
internal void Delete()
|
||||
{
|
||||
EntityHelper.DeleteEntity(
|
||||
this,
|
||||
_EntityDAL.Delete
|
||||
);
|
||||
}
|
||||
internal void Save()
|
||||
{
|
||||
EntityHelper.SaveEntity(
|
||||
this,
|
||||
() =>
|
||||
{
|
||||
_EntityDAL.Created = DateTime.Now;
|
||||
_EntityDAL.Updated = _EntityDAL.Created;
|
||||
_EntityDAL.Insert();
|
||||
},
|
||||
() =>
|
||||
{
|
||||
_EntityDAL.Updated = DateTime.Now;
|
||||
_EntityDAL.Update();
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
private static <BIZCLASSNAME> CreateNew(<CREATENEWPARAMS>)
|
||||
{
|
||||
var entity = new <BIZCLASSNAME>();
|
||||
<CREATENEWPROPERTYSETTERS>
|
||||
entity.Save();
|
||||
|
||||
return entity;
|
||||
}
|
||||
internal static <BIZCLASSNAME> Get(<IDTYPE> id)
|
||||
{
|
||||
return EntityHelper.GetEntity<<IDTYPE>, <CLASSNAME>, <BIZCLASSNAME>>(
|
||||
EntityCacheInfo,
|
||||
id,
|
||||
() => <CLASSNAME>.Get(id)
|
||||
);
|
||||
}
|
||||
|
||||
#$@#@ - Unique ID used to find this section, don't change it. 599W#%2
|
||||
internal static ICollection<<BIZCLASSNAME>> Get<BIZCLASSNAME>sBy<FKPROPERTYNAME>(<FKIDTYPE> <FKPROPERTYNAME>)
|
||||
{
|
||||
string collectionId = string.Format("Get<BIZCLASSNAME>sBy<FKPROPERTYNAME>_<FKPROPERTYNAME>:{0}", <FKPROPERTYNAME>);
|
||||
return EntityHelper.GetEntityCollection<<BIZCLASSNAME>, <IDTYPE>>(
|
||||
EntityCacheInfo,
|
||||
new CacheManager.CachePolicy(
|
||||
CacheManager.CacheScopeFilter.Qualified,
|
||||
string.Format("<FKPROPERTYNAME>:{0}", <FKPROPERTYNAME>)
|
||||
),
|
||||
collectionId,
|
||||
() => <BIZCLASSNAME>DAL.Get<BIZCLASSNAME>IDsBy<FKPROPERTYNAME>(<FKPROPERTYNAME>),
|
||||
Get
|
||||
);
|
||||
}
|
||||
#$@#@2 - Unique ID used to find this section, don't change it. 599W#%44
|
||||
|
||||
public void Construct(<CLASSNAME> dal)
|
||||
{
|
||||
_EntityDAL = dal;
|
||||
}
|
||||
|
||||
public CacheInfo CacheInfo
|
||||
{
|
||||
get { return EntityCacheInfo; }
|
||||
}
|
||||
|
||||
public static CacheInfo EntityCacheInfo = new CacheInfo(
|
||||
new CacheabilitySettings(collectionsAreCacheable: true, countsAreCacheable: true, entityIsCacheable: true, idLookupsAreCacheable: true, hasUnqualifiedCollections: true),
|
||||
typeof(<BIZCLASSNAME>).ToString(),
|
||||
true
|
||||
);
|
||||
|
||||
public IEnumerable<string> BuildEntityIDLookups()
|
||||
{
|
||||
yield break;
|
||||
}
|
||||
|
||||
public IEnumerable<StateToken> BuildStateTokenCollection()
|
||||
{
|
||||
%^^^^yield return new StateToken(string.Format("<FKPROPERTYNAME>:{0}", <FKPROPERTYNAME>));^^^^%
|
||||
yield break;
|
||||
}
|
||||
|
||||
<BIZREMOTECACHEABLEREGION>
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,133 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Data.SqlClient;
|
||||
using Roblox.Common;
|
||||
using Roblox.Common.Persistence;
|
||||
|
||||
namespace <NAMESPACE>
|
||||
{
|
||||
internal class <DALCLASSNAME>
|
||||
{
|
||||
private <IDTYPE> _ID = default(<IDTYPE>);
|
||||
<DALFIELDS>
|
||||
internal <IDTYPE> ID
|
||||
{
|
||||
get { return _ID; }
|
||||
set { _ID = value; }
|
||||
}
|
||||
<DALPROPERTIES>
|
||||
private static string <CONNECTIONSTRING>
|
||||
{
|
||||
get { return <CONNECTIONSTRINGVALUE>; }
|
||||
}
|
||||
|
||||
internal <DALCLASSNAME>()
|
||||
{
|
||||
}
|
||||
|
||||
internal void Delete()
|
||||
{
|
||||
if (_ID == default(<IDTYPE>))
|
||||
throw new ApplicationException("Required value not specified: ID.");
|
||||
|
||||
var queryParameters = new List<SqlParameter>
|
||||
{
|
||||
new SqlParameter("@ID", _ID)
|
||||
};
|
||||
|
||||
var dbInfo = new dbInfo(
|
||||
<CONNECTIONSTRING>,
|
||||
"<DELETEPROCEDURE>",
|
||||
queryParameters
|
||||
);
|
||||
|
||||
EntityHelper.DoEntityDALDelete(dbInfo);
|
||||
}
|
||||
internal void Insert()
|
||||
{
|
||||
var queryParameters = new List<SqlParameter>
|
||||
{
|
||||
<QUERYPARAMETERS>
|
||||
};
|
||||
|
||||
var dbInfo = new dbInfo(
|
||||
<CONNECTIONSTRING>,
|
||||
"<INSERTPROCEDURE>",
|
||||
new SqlParameter("@ID", <IDSQLDBTYPE>),
|
||||
queryParameters
|
||||
);
|
||||
|
||||
_ID = EntityHelper.DoEntityDALInsert<<IDTYPE>>(dbInfo);
|
||||
}
|
||||
internal void Update()
|
||||
{
|
||||
var queryParameters = new List<SqlParameter>
|
||||
{
|
||||
new SqlParameter("@ID", _ID),
|
||||
<QUERYPARAMETERS>
|
||||
};
|
||||
|
||||
var dbInfo = new dbInfo(
|
||||
<CONNECTIONSTRING>,
|
||||
"<UPDATEPROCEDURE>",
|
||||
queryParameters
|
||||
);
|
||||
|
||||
EntityHelper.DoEntityDALUpdate(dbInfo);
|
||||
}
|
||||
|
||||
private static <DALCLASSNAME> BuildDAL(SqlDataReader reader)
|
||||
{
|
||||
var dal = new <DALCLASSNAME>();
|
||||
|
||||
while (reader.Read())
|
||||
{
|
||||
dal.ID = (<IDTYPE>)reader["ID"];
|
||||
<READERPARAMETERS>
|
||||
}
|
||||
|
||||
if (dal.ID == default(<IDTYPE>))
|
||||
return null;
|
||||
|
||||
return dal;
|
||||
}
|
||||
|
||||
internal static <DALCLASSNAME> Get(<IDTYPE> id)
|
||||
{
|
||||
if (id == default(<IDTYPE>))
|
||||
return null;
|
||||
|
||||
var queryParameters = new List<SqlParameter>
|
||||
{
|
||||
new SqlParameter("@ID", id)
|
||||
};
|
||||
|
||||
var dbInfo = new dbInfo(
|
||||
<CONNECTIONSTRING>,
|
||||
"<GETPROCEDURE>",
|
||||
queryParameters
|
||||
);
|
||||
|
||||
return EntityHelper.GetEntityDAL(dbInfo, BuildDAL);
|
||||
}
|
||||
#$@#@ - Unique ID used to find this section, don't change it. 599W#%2
|
||||
internal static ICollection<<IDTYPE>> Get<CLASSNAME>IDsBy<FKPROPERTYNAME>(<FKIDTYPE> <FKPROPERTYNAME>)
|
||||
{
|
||||
if (<FKPROPERTYNAME> == default(<FKIDTYPE>))
|
||||
throw new ApplicationException("Required value not specified: <FKPROPERTYNAME>.");
|
||||
|
||||
var queryParameters = new List<SqlParameter>();
|
||||
queryParameters.Add(new SqlParameter("@<FKPROPERTYNAME>", <FKPROPERTYNAME>));
|
||||
|
||||
return EntityHelper.GetDataEntityIDCollection<<IDTYPE>>(
|
||||
new dbInfo(
|
||||
<CONNECTIONSTRING>,
|
||||
"<CLASSNAME>s_Get<CLASSNAME>IDsBy<FKPROPERTYNAME>",
|
||||
queryParameters
|
||||
)
|
||||
);
|
||||
}
|
||||
#$@#@2 - Unique ID used to find this section, don't change it. 599W#%44
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,169 @@
|
|||
/* Standard Insertion */
|
||||
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[<INSERTPROCEDURE>]') AND type in (N'P', N'PC'))
|
||||
BEGIN
|
||||
EXEC('CREATE PROCEDURE [dbo].[<INSERTPROCEDURE>] AS BEGIN SET NOCOUNT ON; END')
|
||||
END
|
||||
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
|
||||
SET QUOTED_IDENTIFIER OFF
|
||||
GO
|
||||
|
||||
ALTER PROCEDURE [dbo].[<INSERTPROCEDURE>]
|
||||
(
|
||||
@ID <SQLIDTYPE> OUTPUT
|
||||
<SQLINPUTPARAMETERLIST>
|
||||
)
|
||||
AS
|
||||
|
||||
SET NOCOUNT ON
|
||||
|
||||
INSERT INTO
|
||||
[<TABLENAME>]
|
||||
(
|
||||
<COLUMNLIST>
|
||||
)
|
||||
VALUES
|
||||
(
|
||||
<SQLPARAMETERLIST>
|
||||
)
|
||||
|
||||
SET @ID = SCOPE_IDENTITY();
|
||||
|
||||
SET NOCOUNT OFF
|
||||
|
||||
RETURN
|
||||
|
||||
GO
|
||||
|
||||
|
||||
/* Standard Update */
|
||||
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[<UPDATEPROCEDURE>]') AND type in (N'P', N'PC'))
|
||||
BEGIN
|
||||
EXEC('CREATE PROCEDURE [dbo].[<UPDATEPROCEDURE>] AS BEGIN SET NOCOUNT ON; END')
|
||||
END
|
||||
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
|
||||
SET QUOTED_IDENTIFIER OFF
|
||||
GO
|
||||
|
||||
ALTER PROCEDURE [dbo].[<UPDATEPROCEDURE>]
|
||||
(
|
||||
@ID <SQLIDTYPE>
|
||||
<SQLINPUTPARAMETERLIST>
|
||||
)
|
||||
AS
|
||||
|
||||
SET NOCOUNT ON
|
||||
|
||||
UPDATE
|
||||
[<TABLENAME>]
|
||||
SET
|
||||
<SETVALUES>
|
||||
WHERE
|
||||
([ID] = @ID)
|
||||
|
||||
SET NOCOUNT OFF
|
||||
|
||||
RETURN
|
||||
|
||||
GO
|
||||
|
||||
/* Standard Get-By-ID */
|
||||
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[<GETPROCEDURE>]') AND type in (N'P', N'PC'))
|
||||
BEGIN
|
||||
EXEC('CREATE PROCEDURE [dbo].[<GETPROCEDURE>] AS BEGIN SET NOCOUNT ON; END')
|
||||
END
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
|
||||
SET QUOTED_IDENTIFIER ON
|
||||
GO
|
||||
|
||||
|
||||
ALTER PROCEDURE [dbo].[<GETPROCEDURE>]
|
||||
(
|
||||
@ID <SQLIDTYPE>
|
||||
)
|
||||
AS
|
||||
|
||||
SET NOCOUNT ON
|
||||
|
||||
SELECT
|
||||
[ID]
|
||||
,<COLUMNLIST>
|
||||
FROM
|
||||
[<TABLENAME>]
|
||||
WHERE
|
||||
([ID] = @ID)
|
||||
|
||||
SET NOCOUNT OFF
|
||||
|
||||
RETURN
|
||||
GO
|
||||
|
||||
|
||||
/* Standard Delete */
|
||||
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[<DELETEPROCEDURE>]') AND type in (N'P', N'PC'))
|
||||
BEGIN
|
||||
EXEC('CREATE PROCEDURE [dbo].[<DELETEPROCEDURE>] AS BEGIN SET NOCOUNT ON; END')
|
||||
END
|
||||
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
|
||||
SET QUOTED_IDENTIFIER ON
|
||||
GO
|
||||
|
||||
|
||||
ALTER PROCEDURE [dbo].[<DELETEPROCEDURE>]
|
||||
(
|
||||
@ID <SQLIDTYPE>
|
||||
)
|
||||
AS
|
||||
|
||||
SET NOCOUNT ON
|
||||
|
||||
DELETE FROM
|
||||
[<TABLENAME>]
|
||||
WHERE
|
||||
([ID] = @ID)
|
||||
|
||||
SET NOCOUNT OFF
|
||||
|
||||
RETURN
|
||||
GO
|
||||
|
||||
|
||||
#$@#@
|
||||
/* FK Lookup */
|
||||
/* Don't use this. It's garbage. */
|
||||
SET ANSI_NULLS ON
|
||||
GO
|
||||
|
||||
SET QUOTED_IDENTIFIER ON
|
||||
GO
|
||||
|
||||
CREATE PROCEDURE [dbo].[<CLASSNAME>s_Get<CLASSNAME>IDsBy<FKPROPERTYNAME>]
|
||||
(
|
||||
@<FKPROPERTYNAME> <FKIDSQLTPE>
|
||||
)
|
||||
AS
|
||||
|
||||
SET NOCOUNT ON
|
||||
|
||||
SELECT
|
||||
[ID]
|
||||
FROM
|
||||
[<CLASSNAME>s]
|
||||
WHERE
|
||||
([<FKPROPERTYNAME>] = @<FKPROPERTYNAME>)
|
||||
|
||||
SET NOCOUNT OFF
|
||||
|
||||
RETURN
|
||||
|
||||
599W#%44
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
$(function () {
|
||||
|
||||
//When the template category dropdown changes selection, update the option that is selected because
|
||||
//our AJAX get will not refresh this value and we need it to be updated for future requests.
|
||||
$('#templateCategories').change(function () {
|
||||
var templateCategory = $(this);
|
||||
$("option[selected='selected']").removeAttr('selected');
|
||||
$('option').each(function () {
|
||||
if ($(this).val() == $(templateCategory).val()) {
|
||||
$(this).attr('selected', 'selected');
|
||||
}
|
||||
});
|
||||
$('#TemplateCategory').val($(this).val());
|
||||
$(this).closest('form').trigger('submit');
|
||||
});
|
||||
|
||||
//Refresh the text fields
|
||||
$('#NewTemplateCategory').val("");
|
||||
$('#templateID').val("");
|
||||
|
||||
//Disable the remove button if there are no template categories
|
||||
if ($('#templateCategories').val() == "" || $('#templateCategories').val() === 'undefined') {
|
||||
$('#removeTemplateButton').attr('disabled', 'disabled');
|
||||
}
|
||||
});
|
||||
|
|
@ -0,0 +1,96 @@
|
|||
$(function () {
|
||||
$("span[data-make-button]").button();
|
||||
|
||||
var getButton = $("#get-value-button");
|
||||
var setButton = $("#set-value-button");
|
||||
var deleteButton = $("#delete-button");
|
||||
|
||||
var keyField = $("#setting-key");
|
||||
var valueField = $("#setting-value");
|
||||
var baseGetUrl = getButton.data("url");
|
||||
var baseSetUrl = setButton.data("url");
|
||||
var baseDeleteUrl = deleteButton.data("url");
|
||||
var statusMessage = $("#status-message");
|
||||
|
||||
function showMessage(text, color) {
|
||||
color = color || "black";
|
||||
statusMessage.css("color", color);
|
||||
statusMessage.text(text);
|
||||
}
|
||||
|
||||
getButton.click(function () {
|
||||
valueField.val(""); // clear value
|
||||
var key = keyField.val();
|
||||
var url = baseGetUrl + "?key=" + encodeURIComponent(key);
|
||||
$.ajax({
|
||||
url: url,
|
||||
cache: false,
|
||||
success: function (data) {
|
||||
valueField.val(data);
|
||||
showMessage("Setting found");
|
||||
},
|
||||
error: function (jqXHR, textStatus, errorThrown) {
|
||||
showMessage(errorThrown, "red");
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
setButton.click(function () {
|
||||
if (!Roblox.Admi.SettingsSemaphore.doesCurrentUserHoldSettingsSemaphore()) {
|
||||
return false;
|
||||
}
|
||||
var confirmed = prompt("Are you sure you want to modify this setting? Type YES to continue.") == "YES";
|
||||
if (confirmed) {
|
||||
var key = keyField.val();
|
||||
var value = valueField.val();
|
||||
var params = { key: key, value: value };
|
||||
$.post(baseSetUrl, params, function (data) {
|
||||
if (data == "SET") {
|
||||
showMessage("Setting saved", "green");
|
||||
}
|
||||
else {
|
||||
showMessage("Error, setting was not saved", "red");
|
||||
}
|
||||
});
|
||||
}
|
||||
else {
|
||||
showMessage("Save aborted", "orange");
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
deleteButton.click(function () {
|
||||
if (!Roblox.Admi.SettingsSemaphore.doesCurrentUserHoldSettingsSemaphore()) {
|
||||
return false;
|
||||
}
|
||||
var confirmed = prompt("Are you sure you want to modify this setting? Type YES to continue.") == "YES";
|
||||
if (confirmed) {
|
||||
var key = keyField.val();
|
||||
var params = { key: key };
|
||||
$.post(baseDeleteUrl, params, function (data) {
|
||||
if (data == "DELETED") {
|
||||
showMessage("Setting was deleted", "green");
|
||||
}
|
||||
else {
|
||||
showMessage("Error, setting was not deleted", "red");
|
||||
}
|
||||
});
|
||||
}
|
||||
else {
|
||||
showMessage("Delete aborted", "orange");
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
$("#format-json-button").click(function () {
|
||||
var str = valueField.val();
|
||||
try {
|
||||
var json = JSON.parse(str);
|
||||
var formattedString = JSON.stringify(json, null, 4);
|
||||
valueField.val(formattedString);
|
||||
}
|
||||
catch (e) {
|
||||
alert("Error while parsing JSON:\r\n" + e);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
$(function () {
|
||||
function updateSettingResults() {
|
||||
var page = $('#MarketingConfigOptions .selected').attr('data-id');
|
||||
var url = "/MarketingConfig/GetConfigs?" + $.param({ page: page });
|
||||
$("#settingsResultsDiv").load(url, function () {});
|
||||
}
|
||||
function switchConfigs(event) {
|
||||
$('#MarketingConfigOptions span').removeClass('selected');
|
||||
$(event.target).addClass('selected');
|
||||
updateSettingResults();
|
||||
}
|
||||
|
||||
var settingsObj = Roblox.ConfigSettings({
|
||||
isTakeoverPage: true,
|
||||
updateSettingResults: updateSettingResults
|
||||
});
|
||||
settingsObj.init();
|
||||
|
||||
$('#MarketingConfigOptions span').click(function (event) {
|
||||
switchConfigs(event);
|
||||
});
|
||||
|
||||
});
|
||||
|
|
@ -0,0 +1,64 @@
|
|||
$(function () {
|
||||
//$('.StripedTable tr:even').css('background-color', '#ecf6fc');
|
||||
//$('.StripedTable tr:odd').css('background-color', '#bcd4ec');
|
||||
$('.StripedTable tr').mouseover(function () { $(this).addClass('MouseOver'); });
|
||||
$('.StripedTable tr').mouseout(function () { $(this).removeClass('MouseOver'); });
|
||||
$('.ThumbnailClass').click(
|
||||
function () {
|
||||
var assetId = $(this).attr('id').split('_')[1];
|
||||
$(this).hide();
|
||||
$('#assetId_' + assetId).show();
|
||||
});
|
||||
|
||||
});
|
||||
function UpdateItem(id, button) {
|
||||
// Get our textbox values
|
||||
var assettype, name, releasedate, priceinrobux, priceintickets, islimited, totalavailable;
|
||||
name = $('#name_' + id).val();
|
||||
releasedate = $('#releasedate_' + id).val();
|
||||
priceinrobux = $('#priceinrobux_' + id).val();
|
||||
priceintickets = $('#priceintickets_' + id).val();
|
||||
islimited = $('#islimited_' + id).is(':checked');
|
||||
totalavailable = $('#totalavailable_' + id).val();
|
||||
isexpirable = $('#isexpirable_' + id).is(':checked');
|
||||
expirationperiod = $('#expirationperiod_' + id).val();
|
||||
if (expirationperiod === "D.HH:MM:SS") {
|
||||
expirationperiod = ""; //otherwise we'll get an error
|
||||
}
|
||||
|
||||
// Put up a spinny
|
||||
button.attr('disabled', true);
|
||||
if ($('#success_' + id) != null)
|
||||
$('#success_' + id).remove();
|
||||
if ($('#failure_' + id) != null)
|
||||
$('#failure_' + id).remove();
|
||||
if ($('#error_' + id) != null)
|
||||
$('#error_' + id).remove();
|
||||
var spinnerId = "spinner_" + id;
|
||||
button.after("<img src='/images/waiting.gif' id='" + spinnerId + "'/>");
|
||||
|
||||
// Send them to the handler
|
||||
$.get(
|
||||
"/Legacy/Asset/DelayedReleaseAssetHandler.ashx?reqType=updateDelayedAsset" +
|
||||
"&delayedReleaseAssetId=" + id +
|
||||
"&name=" + name +
|
||||
"&releasedate=" + releasedate +
|
||||
"&priceinrobux=" + priceinrobux +
|
||||
"&priceintickets=" + priceintickets +
|
||||
"&islimited=" + islimited +
|
||||
"&totalavailable=" + totalavailable +
|
||||
"&isexpirable=" + isexpirable +
|
||||
"&expirationperiod=" + expirationperiod
|
||||
,
|
||||
function (data) {
|
||||
|
||||
button.attr('disabled', false);
|
||||
if (data.indexOf("Success") >= 0) {
|
||||
$('#' + spinnerId).replaceWith("<img src='/UnsecureContent/images/accept.png' id='success_" + id + "' />");
|
||||
}
|
||||
else if (data.indexOf("Failure") >= 0) {
|
||||
$('#' + spinnerId).replaceWith("<img src='/UnsecureContent/images/cross.png' id='failure_" + id + "' />");
|
||||
$("#failure_" + id).after("<label id='error_" + id + "' style='color:red;'>" + data.substring(data.indexOf(':') + 1) + "</label>");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
@ -0,0 +1,71 @@
|
|||
|
||||
if (typeof Admin === "undefined") {
|
||||
Admin = {};
|
||||
}
|
||||
|
||||
Admin.FeaturedPlaces = function() {
|
||||
|
||||
var selectedPlaceIdEdit;
|
||||
|
||||
$('#NewPlatformInput').keypress(function(e) {
|
||||
if (e.keyCode == 13) {
|
||||
var name = $('#NewPlatformInput').val();
|
||||
$.post('/featuredplaces/AddPlatformType', { platformName: name }, function(data) {
|
||||
$('#ListOfPlatforms').html(data);
|
||||
$('#NewPlatformInput').val("");
|
||||
});
|
||||
}
|
||||
});
|
||||
$('.btn-cancel').click(function() {
|
||||
$.modal.close();
|
||||
});
|
||||
$('.btn-submit').click(function() {
|
||||
var selectedPlaceId = $('#PlaceIDInput').val();
|
||||
var url = '/featuredplaces/CreateFeaturedPlace?';
|
||||
if (selectedPlaceId == undefined) {
|
||||
selectedPlaceId = selectedPlaceIdEdit;
|
||||
url = '/featuredplaces/EditFeaturedPlace?';
|
||||
}
|
||||
var platforms = $('input.platformFilter:checked').map(function() { return $(this).data('platformid'); }).get();
|
||||
if (platforms != null) {
|
||||
for (var i = 0; i < platforms.length; i++) {
|
||||
url += "platformTypeIds=" + platforms[i] + "&";
|
||||
}
|
||||
}
|
||||
url += 'placeId=' + selectedPlaceId;
|
||||
$.post(url, function(data) {
|
||||
window.location = "/CreateFeaturedPlaces";
|
||||
});
|
||||
});
|
||||
|
||||
$('#CreateNewFeaturedPlaceLink').click(function() {
|
||||
GenericModal.open("Featured Place", null, null, null /* no callback */);
|
||||
$.get('/featuredplaces/GetFeaturedPlaceInfo', function(data) {
|
||||
$('#FeaturedPlaceData').html(data);
|
||||
});
|
||||
});
|
||||
|
||||
$('#PlatformTypeSelect').change(function() {
|
||||
var selectedplatform = document.getElementById('PlatformTypeSelect').value;
|
||||
window.location = "/CreateFeaturedPlaces?platformTypeId=" + selectedplatform;
|
||||
});
|
||||
|
||||
$('.WhiteSquareTabsContainer li').bind('click', function() {
|
||||
SwitchTabs($(this));
|
||||
});
|
||||
|
||||
function SwitchTabs(nextTabElem) {
|
||||
$('.WhiteSquareTabsContainer .selected, #TabsContentContainer .selected').removeClass('selected');
|
||||
nextTabElem.addClass('selected');
|
||||
$('#' + nextTabElem.attr('contentid')).addClass('selected');
|
||||
}
|
||||
|
||||
$('.EditFeaturedPlace').click(function() {
|
||||
selectedPlaceIdEdit = $(this).attr('placeid');
|
||||
GenericModal.open("Featured Place", null, null, null /* no callback */);
|
||||
$.get('/featuredplaces/GetFeaturedPlaceInfo', { placeId: selectedPlaceIdEdit }, function(data) {
|
||||
$('#FeaturedPlaceData').html(data);
|
||||
});
|
||||
});
|
||||
|
||||
}();
|
||||
|
|
@ -0,0 +1,214 @@
|
|||
if (typeof Roblox === "undefined") {
|
||||
Roblox = {};
|
||||
}
|
||||
if (typeof Roblox.Admin === "undefined") {
|
||||
Roblox.Admin = {};
|
||||
}
|
||||
Roblox.Admin.Games_BadgeAssetAward = function () {
|
||||
//event binding
|
||||
$(function () {
|
||||
$('#AddButton').click(function () {
|
||||
CreateNew();
|
||||
return false;
|
||||
});
|
||||
$('#viewByID').click(function () {
|
||||
GetBadgeAssetAwardsbyBadgeID();
|
||||
return false;
|
||||
});
|
||||
$('#viewAll').click(function () {
|
||||
GetAllBadgeAssetAwards();
|
||||
return false;
|
||||
});
|
||||
$("#badgeIDInput").keypress(function(event){
|
||||
if(event.keyCode=='13')
|
||||
GetBadgeAssetAwardsbyBadgeID();
|
||||
});
|
||||
});
|
||||
|
||||
//variables
|
||||
var pageSize, pageNum, totalNum;
|
||||
|
||||
//public methods
|
||||
function Initialize(pagesize, pagenum, totalnum) {
|
||||
pageSize = pagesize;
|
||||
pageNum = pagenum;
|
||||
totalNum = totalnum;
|
||||
GetAllBadgeAssetAwards();
|
||||
}
|
||||
function ChangePage(newPage) {
|
||||
pageNum = newPage;
|
||||
GetAllBadgeAssetAwards();
|
||||
}
|
||||
function DeleteBadgeAssetAwardClick(e) {
|
||||
var badgeAssetAwardID = $(this).attr('badgeassetawardid');
|
||||
if (confirm("Are you sure you want to delete ID=" + badgeAssetAwardID)) {
|
||||
DeleteBadgeAssetAward(badgeAssetAwardID);
|
||||
}
|
||||
}
|
||||
function CreateNew() {
|
||||
var badgeID = $('#badgeID').val();
|
||||
var assetAwardID = $('#assetAwardID').val();
|
||||
var description = $('#description').val();
|
||||
var url = "BadgeAssetAwardHandler.ashx?cmd=add&badgeID=" + badgeID + "&assetID=" + assetAwardID + "&description=" + encodeURIComponent(description);
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: url,
|
||||
cache: false,
|
||||
dataType: "text",
|
||||
success: function (data, extStatus, jqXHR) {
|
||||
totalNum++;
|
||||
GetAllBadgeAssetAwards();
|
||||
dataJSON = $.parseJSON(data);
|
||||
if(dataJSON != null)
|
||||
{
|
||||
alert(dataJSON.msg);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
function GetBadgeAssetAwardsbyBadgeID() {
|
||||
var badgeID = $('#badgeIDInput').val();
|
||||
if (badgeID === '')
|
||||
return;
|
||||
if (badgeID === 0)
|
||||
return;
|
||||
var url = "BadgeAssetAwardHandler.ashx?cmd=getAwards&badgeID=" + badgeID;
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: url,
|
||||
cache: false,
|
||||
dataType: "json",
|
||||
success: function (data, extStatus, jqXHR) {
|
||||
dataJSON = $.parseJSON(data);
|
||||
if(dataJSON != null)
|
||||
{
|
||||
alert(dataJSON.msg);
|
||||
}
|
||||
else
|
||||
{
|
||||
displayAssetAwards(data);
|
||||
$("#pager").hide();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
function GetAllBadgeAssetAwards() {
|
||||
var url = "BadgeAssetAwardHandler.ashx?cmd=getAllAwards&StartRowIndex=" + (pageNum - 1) * pageSize + "&MaximumRows=" + pageSize;
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: url,
|
||||
cache: false,
|
||||
dataType: "json",
|
||||
success: displayAssetAwards
|
||||
});
|
||||
}
|
||||
|
||||
//private functions
|
||||
|
||||
function displayAssetAwards(badgeAssetAwards) {
|
||||
//clean out old list
|
||||
$('#awardTable').detach();
|
||||
if (badgeAssetAwards[0] == null) {
|
||||
$('#noAwards').show();
|
||||
}
|
||||
else {
|
||||
$('#noAwards').hide();
|
||||
}
|
||||
|
||||
//construct new table
|
||||
var counter = 0;
|
||||
var newTable = $("#tableTemplate").clone(true).attr('id', 'awardTable');
|
||||
while (badgeAssetAwards[counter] != null) {
|
||||
var badgeAssetAward = unwrapBadgeAssetAward(badgeAssetAwards[counter]);
|
||||
var newRow = $("#trTemplate").clone(true).show().attr('id', badgeAssetAward.id);
|
||||
$(".ID", newRow).text(badgeAssetAward.id);
|
||||
$(".BadgeID", newRow).text(badgeAssetAward.badgeID).attr('href', "/item.aspx?id=" + badgeAssetAward.badgeID);
|
||||
$(".AssetAwardID", newRow).text(badgeAssetAward.assetAwardID).attr('href', "/item.aspx?id=" + badgeAssetAward.assetAwardID);
|
||||
$(".Description", newRow).text(badgeAssetAward.description);
|
||||
$(".Created", newRow).text(badgeAssetAward.created);
|
||||
$(".Updated", newRow).text(badgeAssetAward.updated);
|
||||
$(".editButton", newRow).attr("badgeassetawardid", badgeAssetAward.id);
|
||||
$(".deleteButton", newRow).attr("badgeassetawardid", badgeAssetAward.id).click(DeleteBadgeAssetAwardClick);
|
||||
newTable.append(newRow);
|
||||
counter++;
|
||||
}
|
||||
newTable.show();
|
||||
$('#AssetAwards').append(newTable);
|
||||
|
||||
$("#pager").html('').hide();
|
||||
if (totalNum > pageSize) {
|
||||
var beginPages = 1;
|
||||
var endPage = Math.ceil(totalNum / pageSize);
|
||||
var endPageGroup = Math.ceil(endPage / pageSize);
|
||||
var currentPageGroup = Math.ceil(pageNum / pageSize);
|
||||
var startIndex = (((currentPageGroup - 1) * pageSize) + 1)
|
||||
var endIndex = (currentPageGroup * pageSize)
|
||||
if (currentPageGroup != 1) {
|
||||
$("#pager").append('<a onclick="Roblox.Admin.Games_ViewBadgeAssetAward.ChangePage(' + ((currentPageGroup * pageSize) - 1) + ')" style="padding: 5px; cursor: pointer">...</a>');
|
||||
}
|
||||
|
||||
for (var j = startIndex; j <= endIndex; j++) {
|
||||
if (j > endPage) {
|
||||
break;
|
||||
}
|
||||
else if (j == pageNum) {
|
||||
$("#pager").append('<span style="font-weight:bold;padding: 1px">' + j + '</span>');
|
||||
}
|
||||
else {
|
||||
$("#pager").append('<a onclick="Roblox.Admin.Games_BadgeAssetAward.ChangePage(' + j + ')" style="padding: 5px; cursor: pointer">' + j + '</a>');
|
||||
}
|
||||
}
|
||||
if (currentPageGroup < endPageGroup) {
|
||||
$("#pager").append('<a Roblox.Admin.Games_BadgeAssetAward.ChangePage(' + ((currentPageGroup * pageSize) + 1) + ')" style="padding: 5px; cursor: pointer">...</a>').show();
|
||||
}
|
||||
|
||||
$('#pager').show();
|
||||
}
|
||||
}
|
||||
function unwrapBadgeAssetAward(badgeAssetAward) {
|
||||
return {
|
||||
id: badgeAssetAward.ID,
|
||||
badgeID: badgeAssetAward.BadgeID,
|
||||
assetAwardID: badgeAssetAward.AssetAwardID,
|
||||
description: badgeAssetAward.Description,
|
||||
created: dateHelper(badgeAssetAward.Created),
|
||||
updated: dateHelper(badgeAssetAward.Updated)
|
||||
}
|
||||
}
|
||||
function dateHelper(unclean) {
|
||||
var clean = Number(unclean.substring(6, 19));
|
||||
var date = new Date(clean);
|
||||
return (date.getMonth() + 1) + "/" + date.getDate() + "/" + date.getFullYear();
|
||||
}
|
||||
function DeleteBadgeAssetAward(badgeAssetAwardID) {
|
||||
var url = "BadgeAssetAwardHandler.ashx?cmd=delete&bAAID=" + badgeAssetAwardID;
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: url,
|
||||
cache: false,
|
||||
dataType: "text",
|
||||
success: function (data, extStatus, jqXHR) {
|
||||
var dataJSON = $.parseJSON(data);
|
||||
if(dataJSON !== null)
|
||||
{
|
||||
if(dataJSON.status === "faliure")
|
||||
{
|
||||
alert(dataJSON.msg);
|
||||
}
|
||||
else
|
||||
{
|
||||
alert(dataJSON.msg);
|
||||
totalNum--;
|
||||
GetAllBadgeAssetAwards();
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//Interface exposing public methods!
|
||||
return {
|
||||
ChangePage: ChangePage,
|
||||
Initialize: Initialize
|
||||
};
|
||||
} ();
|
||||
|
|
@ -0,0 +1,283 @@
|
|||
$(function () {
|
||||
function warningPrompt(promptToShow) {
|
||||
var text = promptToShow + "\n\nType YES to confirm.";
|
||||
var result = prompt(text);
|
||||
return result == "YES";
|
||||
}
|
||||
|
||||
$("span[data-make-button]").button();
|
||||
|
||||
////////////// clients page starts //////////////
|
||||
var clientDialog = $("#clientDialog").dialog({
|
||||
title: "Create New Api Client",
|
||||
modal: true,
|
||||
resizable: false,
|
||||
width: 500,
|
||||
autoOpen: false,
|
||||
buttons: {
|
||||
"Generate Guid": function() {
|
||||
// get a guid from the server
|
||||
$.get("/ServicesConfig/GenerateGuid", function(guid) {
|
||||
$("#clientKey").val(guid);
|
||||
});
|
||||
},
|
||||
|
||||
"Save": function () {
|
||||
var params = {
|
||||
key: $("#clientKey").val(),
|
||||
note: $("#clientNote").val(),
|
||||
};
|
||||
|
||||
$.post("/ServicesConfig/AddClient", params, function () {
|
||||
clientDialog.dialog("close");
|
||||
window.location.reload();
|
||||
});
|
||||
},
|
||||
|
||||
"Cancel": function () {
|
||||
clientDialog.dialog("close");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$("#create-new-client-button").click(function () {
|
||||
clientDialog.dialog("open");
|
||||
});
|
||||
|
||||
/*
|
||||
$("a[data-delete-client]").click(function () {
|
||||
var tr = $(this).closest("tr");
|
||||
var note = tr.data("note");
|
||||
if (warningPrompt("Are you sure you want to delete client '" + note + "'?")) {
|
||||
var key = tr.data("key");
|
||||
|
||||
// do deletion
|
||||
$.post("/ServicesConfig/DeleteClient", { key: key }, function() {
|
||||
window.location.reload();
|
||||
});
|
||||
}
|
||||
return false;
|
||||
});
|
||||
*/
|
||||
//////////////// clients page ends //////////////////////
|
||||
|
||||
|
||||
////////////////// services page starts //////////////////////
|
||||
var serviceDialog = $("#serviceDialog").dialog({
|
||||
title: "Create New Api Service",
|
||||
modal: true,
|
||||
resizable: false,
|
||||
width: 500,
|
||||
autoOpen: false,
|
||||
buttons: {
|
||||
"Save": function () {
|
||||
var params = {
|
||||
name: $("#serviceName").val(),
|
||||
};
|
||||
|
||||
$.post("/ServicesConfig/AddService", params, function () {
|
||||
serviceDialog.dialog("close");
|
||||
window.location.reload();
|
||||
});
|
||||
},
|
||||
|
||||
"Cancel": function () {
|
||||
serviceDialog.dialog("close");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$("#create-new-service-button").click(function () {
|
||||
serviceDialog.dialog("open");
|
||||
});
|
||||
|
||||
/*
|
||||
$("a[data-delete-service]").click(function () {
|
||||
var tr = $(this).closest("tr");
|
||||
var serviceName = tr.data("name");
|
||||
if (warningPrompt("Are you sure you want to delete service '" + serviceName + "'?")) {
|
||||
|
||||
// do deletion
|
||||
$.post("/ServicesConfig/DeleteService", { name: serviceName }, function() {
|
||||
window.location.reload();
|
||||
});
|
||||
}
|
||||
return false;
|
||||
});
|
||||
*/
|
||||
//////////////// services page ends ////////////////////////////
|
||||
|
||||
///////////// operations page starts ///////////////////
|
||||
var operationDialog = $("#operationDialog").dialog({
|
||||
title: "Create New Operation",
|
||||
modal: true,
|
||||
resizable: false,
|
||||
width: 500,
|
||||
autoOpen: false,
|
||||
buttons: {
|
||||
"Save": function () {
|
||||
var params = {
|
||||
operationName: $("#operationName").val(),
|
||||
serviceName: $("#current-service-name").val()
|
||||
};
|
||||
|
||||
$.post("/ServicesConfig/AddOperation", params, function () {
|
||||
operationDialog.dialog("close");
|
||||
window.location.reload();
|
||||
});
|
||||
},
|
||||
|
||||
"Cancel": function () {
|
||||
operationDialog.dialog("close");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$("#create-new-operation-button").click(function () {
|
||||
operationDialog.dialog("open");
|
||||
});
|
||||
|
||||
|
||||
$("a[data-delete-operation]").click(function () {
|
||||
var tr = $(this).closest("tr");
|
||||
var operationName = tr.data("name");
|
||||
if (warningPrompt("Are you sure you want to delete operation '" + operationName + "'?")) {
|
||||
// do deletion
|
||||
var operationId = $(this).data("operationid");
|
||||
var params = {
|
||||
operationId: operationId
|
||||
};
|
||||
|
||||
$.post("/ServicesConfig/DeleteOperation", params, function() {
|
||||
window.location.reload();
|
||||
});
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
///////////// operations page ends ///////////////////
|
||||
|
||||
/////////// service authorizations page starts ////////////////
|
||||
var serviceAuthorizationDialog = $("#serviceAuthorizationDialog").dialog({
|
||||
title: "Create New Service Authorization",
|
||||
modal: true,
|
||||
resizable: false,
|
||||
width: 530,
|
||||
autoOpen: false,
|
||||
buttons: {
|
||||
"Save": function () {
|
||||
var params = {
|
||||
key: $("#clientKey").val(),
|
||||
serviceName: $("#serviceName").val(),
|
||||
authorizationType: $("#authorizationType").val()
|
||||
};
|
||||
|
||||
$.post("/ServicesConfig/AddServiceAuthorization", params, function () {
|
||||
serviceAuthorizationDialog.dialog("close");
|
||||
window.location.reload();
|
||||
});
|
||||
},
|
||||
|
||||
"Cancel": function () {
|
||||
serviceAuthorizationDialog.dialog("close");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$("#create-new-service-authorization-button").click(function () {
|
||||
serviceAuthorizationDialog.dialog("open");
|
||||
});
|
||||
|
||||
$("a[data-change-service-authorization]").click(function() {
|
||||
var tr = $(this).closest("tr");
|
||||
var serviceName = tr.data("service-name");
|
||||
var authorizationType = $(this).text();
|
||||
if (warningPrompt("Are you sure you want to change authorization of '" + serviceName +"' to '" + authorizationType + "'? Please note that changing authorization to 'None' will delete it.")) {
|
||||
var params = {
|
||||
key: $("#clientKey").val(),
|
||||
serviceName: serviceName,
|
||||
authorizationType: authorizationType
|
||||
};
|
||||
|
||||
$.post("/ServicesConfig/AddServiceAuthorization", params, function () {
|
||||
window.location.reload();
|
||||
});
|
||||
}
|
||||
return false;
|
||||
});
|
||||
/////////// service authorizations page ends ////////////////
|
||||
|
||||
/////////// operation authorizations page starts ////////////////
|
||||
var serviceNameDropDown = $("#operationAuthorizationDialog #serviceName");
|
||||
var operationNameDropDown = $("#operationAuthorizationDialog #operationName");
|
||||
|
||||
var operationAuthorizationDialog = $("#operationAuthorizationDialog").dialog({
|
||||
title: "Create New Operation Authorization",
|
||||
modal: true,
|
||||
resizable: false,
|
||||
width: 530,
|
||||
autoOpen: false,
|
||||
|
||||
buttons: {
|
||||
"Save": function () {
|
||||
var params = {
|
||||
key: $("#clientKey").val(),
|
||||
serviceName: serviceNameDropDown.val(),
|
||||
operationName: operationNameDropDown.val(),
|
||||
authorizationType: $("#authorizationType").val()
|
||||
};
|
||||
|
||||
$.post("/ServicesConfig/AddOperationAuthorization", params, function () {
|
||||
operationAuthorizationDialog.dialog("close");
|
||||
window.location.reload();
|
||||
});
|
||||
},
|
||||
|
||||
"Cancel": function () {
|
||||
operationAuthorizationDialog.dialog("close");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
serviceNameDropDown.change(function() {
|
||||
$.get("/ServicesConfig/GetOperations", { serviceName: serviceNameDropDown.val() }, function(opsArray) {
|
||||
operationNameDropDown.empty(); // clear
|
||||
for (var i = 0; i < opsArray.length; i++) {
|
||||
var opName = opsArray[i];
|
||||
operationNameDropDown.append("<option>" + opName + "</option>");
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
var createNewOpAuthButton = $("#create-new-operation-authorization-button");
|
||||
createNewOpAuthButton.one("click", function() {
|
||||
serviceNameDropDown.trigger("change"); // pre-populate for the first time only
|
||||
});
|
||||
createNewOpAuthButton.click(function () {
|
||||
operationAuthorizationDialog.dialog("open");
|
||||
});
|
||||
|
||||
|
||||
$("a[data-change-operation-authorization]").click(function() {
|
||||
var tr = $(this).closest("tr");
|
||||
var serviceName = tr.data("service-name");
|
||||
var operationName = tr.data("operation-name");
|
||||
var authorizationType = $(this).text();
|
||||
if (warningPrompt("Are you sure you want to change authorization of operation '" + operationName +"' of service '" + serviceName +"' to '" + authorizationType + "'? Please note that changing authorization to 'None' will delete it.")) {
|
||||
var params = {
|
||||
key: $("#clientKey").val(),
|
||||
serviceName: serviceName,
|
||||
operationName: operationName,
|
||||
authorizationType: authorizationType
|
||||
};
|
||||
|
||||
$.post("/ServicesConfig/AddOperationAuthorization", params, function () {
|
||||
window.location.reload();
|
||||
});
|
||||
}
|
||||
return false;
|
||||
});
|
||||
/////////// operation authorizations page ends ////////////////
|
||||
});
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,403 @@
|
|||
var Roblox = Roblox || {};
|
||||
|
||||
$(function () {
|
||||
Roblox.ConfigSettings = function (settingsArray) {
|
||||
settingsArray = settingsArray || {};
|
||||
var isTakeoverPage = false;
|
||||
if (settingsArray.isTakeoverPage != isTakeoverPage)
|
||||
isTakeoverPage = settingsArray.isTakeoverPage;
|
||||
|
||||
function showAlertDialog(title, message) {
|
||||
var dlg = window.rbxAlertDialog;
|
||||
if (!dlg) {
|
||||
dlg = window.rbxAlertDialog = $("#alertDialog").dialog({
|
||||
modal: true,
|
||||
resizable: false,
|
||||
width: 400,
|
||||
autoOpen: false,
|
||||
buttons: {
|
||||
"OK": function () {
|
||||
dlg.dialog("close");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$("#alertDialogText").text(message);
|
||||
dlg.dialog("option", "title", title);
|
||||
dlg.dialog("open");
|
||||
}
|
||||
|
||||
function showMessage(message) {
|
||||
window.scrollTo(0, 0);
|
||||
|
||||
$("#messageDivText").text(message);
|
||||
$("#messageDiv").fadeIn();
|
||||
}
|
||||
|
||||
function hideMessage() {
|
||||
$("#messageDiv").fadeOut("slow");
|
||||
}
|
||||
|
||||
function showDeleteDialog(postUrl, id, message, updateHandler) {
|
||||
var dlg = window.rbxDeleteDialog;
|
||||
if (!dlg) {
|
||||
dlg = window.rbxDeleteDialog = $("#deleteDialog").dialog({
|
||||
modal: true,
|
||||
resizable: false,
|
||||
width: 400,
|
||||
autoOpen: false,
|
||||
buttons: {
|
||||
"Delete": function () {
|
||||
dlg.onDelete();
|
||||
dlg.dialog("close");
|
||||
},
|
||||
"Cancel": function () {
|
||||
dlg.dialog("close");
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
$("#deleteDialogMessage").text(message);
|
||||
dlg.currentId = id;
|
||||
dlg.onDelete = function () {
|
||||
$.post(postUrl, { id: id }, function (responseMessage) {
|
||||
if (responseMessage) {
|
||||
showAlertDialog("Success", responseMessage);
|
||||
updateHandler();
|
||||
}
|
||||
else {
|
||||
showAlertDialog("Error", "Delete failed!");
|
||||
}
|
||||
});
|
||||
};
|
||||
dlg.dialog("open");
|
||||
return false;
|
||||
}
|
||||
|
||||
var updateSettingResults = function (handler) {
|
||||
var url = "/Config/GetSettingsHtmlAjax?" + $.param({ GroupName: $("#GroupName").val(), NamePattern: $("#NamePattern").val() });
|
||||
$("#settingsResultsDiv").load(url, function () {
|
||||
if (handler) {
|
||||
handler();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
//if we have an override, use it instead
|
||||
if (settingsArray.updateSettingResults != undefined) {
|
||||
updateSettingResults = settingsArray.updateSettingResults;
|
||||
}
|
||||
|
||||
|
||||
var editSettingDialog = $("#settingsDialog").dialog({
|
||||
modal: true,
|
||||
resizable: false,
|
||||
width: 520,
|
||||
autoOpen: false,
|
||||
buttons: {
|
||||
"Save": function () {
|
||||
var newSetting;
|
||||
|
||||
var params = {
|
||||
id: editSettingDialog.currentId,
|
||||
value: $("#dlgValue").val(),
|
||||
comment: $("#dlgComment").val(),
|
||||
env: $("#dlgIsEnvSpecific").prop("checked"),
|
||||
|
||||
// following settings will NOT get updated on save
|
||||
group: $("#dlgGroup").val(),
|
||||
type: $("#dlgType").val(),
|
||||
name: $("#dlgName").val()
|
||||
};
|
||||
|
||||
if (params.id == -1) {
|
||||
// for new settings, append extra parameters
|
||||
newSetting = true;
|
||||
}
|
||||
|
||||
var url = (isTakeoverPage ? "/MarketingConfig/SetSettingAjax" : "/Config/SetSettingAjax");
|
||||
$.post(url, params, function (response) {
|
||||
if (response.SettingSaved) {
|
||||
if (newSetting && $.inArray(params.group, window.groupNames) == -1) {
|
||||
window.groupNames.push(params.group);
|
||||
$("#GroupName").append('<option>' + params.group + '</option>');
|
||||
$("#GroupName").val(params.group);
|
||||
}
|
||||
|
||||
updateSettingResults(function () {
|
||||
showMessage("Setting '" + params.group + "' - '" + params.name + "' was saved.");
|
||||
});
|
||||
}
|
||||
else {
|
||||
showAlertDialog("Error", "Setting was NOT saved! " + response.Message);
|
||||
}
|
||||
editSettingDialog.dialog("close");
|
||||
});
|
||||
},
|
||||
"Cancel": function () {
|
||||
editSettingDialog.dialog("close");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
function init() {
|
||||
$("#messageDiv").live("click", function () {
|
||||
hideMessage();
|
||||
});
|
||||
|
||||
$("#dlgGroup").autocomplete({ source: window.groupNames });
|
||||
$("#dlgType").autocomplete({ source: [
|
||||
"System.Boolean",
|
||||
"System.Byte",
|
||||
"System.Double",
|
||||
"System.Float",
|
||||
"System.Int32",
|
||||
"System.Int64",
|
||||
"System.TimeSpan",
|
||||
"System.String",
|
||||
"System.Guid"
|
||||
]
|
||||
});
|
||||
|
||||
$("#settingsResultsDiv a:contains('Edit')").live("click", function () {
|
||||
if (!Roblox.Admi.SettingsSemaphore.doesCurrentUserHoldSettingsSemaphore()) {
|
||||
return false;
|
||||
}
|
||||
var id = $(this).closest("tr").data("sid");
|
||||
var url = (isTakeoverPage ? "/MarketingConfig/GetSettingAjax?id=" : "/Config/GetSettingAjax?id=");
|
||||
$.getJSON(url + id, function (s) {
|
||||
$("#dlgGroup").attr("disabled", true).val(s.GroupName);
|
||||
$("#dlgType").attr("disabled", true).val(s.Type);
|
||||
$("#dlgName").attr("disabled", true).val(s.Name);
|
||||
$("#dlgModified").val(s.LastModified);
|
||||
|
||||
$("#dlgValue").val(s.Value);
|
||||
$("#dlgComment").val(s.Comment);
|
||||
$("#dlgIsEnvSpecific").prop("checked", s.IsEnvironmentSpecific);
|
||||
|
||||
editSettingDialog.currentId = id;
|
||||
editSettingDialog.dialog("option", "title", "Edit Setting");
|
||||
editSettingDialog.dialog("open");
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
$("#settingsResultsDiv a:contains('Delete')").live("click", function () {
|
||||
if (!Roblox.Admi.SettingsSemaphore.doesCurrentUserHoldSettingsSemaphore()) {
|
||||
return false;
|
||||
}
|
||||
var id = $(this).closest("tr").data("sid");
|
||||
return showDeleteDialog("/Config/DeleteSettingAjax", id, "Are you sure you want to delete this setting?", updateSettingResults);
|
||||
});
|
||||
|
||||
$("#configTabs").tabs();
|
||||
|
||||
$("span[data-make-button]").button();
|
||||
|
||||
$("#CreateNewSettingButton").click(function () {
|
||||
if (!Roblox.Admi.SettingsSemaphore.doesCurrentUserHoldSettingsSemaphore()) {
|
||||
return false;
|
||||
}
|
||||
// default to currently selected group
|
||||
var defaultName = $("#GroupName").val();
|
||||
if (defaultName == "*") {
|
||||
defaultName = ""; // do not show * when all grups is selected in the drop down
|
||||
}
|
||||
$("#dlgGroup").attr("disabled", false).val(defaultName);
|
||||
$("#dlgType").attr("disabled", false).val("");
|
||||
$("#dlgName").attr("disabled", false).val("");
|
||||
$("#dlgModified").val("Set Automatically");
|
||||
|
||||
$("#dlgValue").val("");
|
||||
$("#dlgComment").val("");
|
||||
$("#dlgIsEnvSpecific").prop("checked", false);
|
||||
|
||||
editSettingDialog.currentId = -1;
|
||||
editSettingDialog.dialog("option", "title", "Create Setting");
|
||||
editSettingDialog.dialog("open");
|
||||
|
||||
return false;
|
||||
});
|
||||
|
||||
$("#GroupName").change(function () {
|
||||
if (this.value) {
|
||||
updateSettingResults();
|
||||
}
|
||||
});
|
||||
|
||||
$("#NamePattern").keyup(function () {
|
||||
updateSettingResults();
|
||||
});
|
||||
|
||||
$("#ClearButton").click(function () {
|
||||
$("#NamePattern").val("");
|
||||
updateSettingResults();
|
||||
});
|
||||
|
||||
updateSettingResults();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/////////////////////////////////////
|
||||
// edit connection strings
|
||||
|
||||
var editConnectionDialog = $("#connectionStringDialog").dialog({
|
||||
modal: true,
|
||||
resizable: false,
|
||||
width: 520,
|
||||
autoOpen: false,
|
||||
buttons: {
|
||||
"Save": function () {
|
||||
var params = {
|
||||
id: editConnectionDialog.currentId,
|
||||
value: $("#conDlgValue").val()
|
||||
};
|
||||
|
||||
if (params.id == -1) {
|
||||
// for new settings, append extra parameters
|
||||
params.group = $("#conDlgGroup").val();
|
||||
params.name = $("#conDlgName").val();
|
||||
}
|
||||
|
||||
$.post("/Config/SetConnectionStringAjax", params, function (s) {
|
||||
if (s) {
|
||||
updateConnectionsResults();
|
||||
showAlertDialog("Roblox", "Connection was saved");
|
||||
}
|
||||
else {
|
||||
showAlertDialog("Error", "Connection was NOT saved!");
|
||||
}
|
||||
|
||||
editConnectionDialog.dialog("close");
|
||||
});
|
||||
|
||||
},
|
||||
"Cancel": function () {
|
||||
editConnectionDialog.dialog("close");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$("#connectionStringsResultsDiv a:contains('Edit')").live("click", function () {
|
||||
var id = $(this).closest("tr").data("id");
|
||||
$.getJSON("/Config/GetConnectionStringAjax?id=" + id, function (s) {
|
||||
$("#conDlgGroup").attr("disabled", true).val(s.GroupName);
|
||||
$("#conDlgName").attr("disabled", true).val(s.Name);
|
||||
$("#conDlgModified").val(s.LastModified);
|
||||
$("#conDlgValue").val(s.Value);
|
||||
|
||||
editConnectionDialog.currentId = id;
|
||||
editConnectionDialog.dialog("option", "title", "Edit Connection String");
|
||||
editConnectionDialog.dialog("open");
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
$("#connectionStringsResultsDiv a:contains('Delete')").live("click", function () {
|
||||
var id = $(this).closest("tr").data("id");
|
||||
return showDeleteDialog("/Config/DeleteConnectionStringAjax", id, "Are you sure you want to delete this connection string?", updateConnectionsResults);
|
||||
});
|
||||
|
||||
function updateConnectionsResults() {
|
||||
$("#connectionStringsResultsDiv").load("/Config/GetConnectionStringsHtmlAjax");
|
||||
}
|
||||
|
||||
$("#CreateNewConnectionButton").click(function () {
|
||||
$("#conDlgGroup").attr("disabled", false).val("");
|
||||
$("#conDlgName").attr("disabled", false).val("");
|
||||
$("#conDlgModified").val("Set Automatically");
|
||||
$("#conDlgValue").val("");
|
||||
|
||||
editConnectionDialog.currentId = -1;
|
||||
editConnectionDialog.dialog("option", "title", "Create Connection String");
|
||||
editConnectionDialog.dialog("open");
|
||||
|
||||
return false;
|
||||
});
|
||||
|
||||
|
||||
updateConnectionsResults();
|
||||
|
||||
///////////// endpoints /////////////////////
|
||||
|
||||
function updateEndpointsResults() {
|
||||
$("#endpointsResultsDiv").load("/Config/GetEndpointAddressListHtmlAjax");
|
||||
}
|
||||
|
||||
updateEndpointsResults();
|
||||
|
||||
|
||||
|
||||
var editEndpointDialog = $("#endpointDialog").dialog({
|
||||
modal: true,
|
||||
resizable: false,
|
||||
width: 520,
|
||||
autoOpen: false,
|
||||
buttons: {
|
||||
"Save": function () {
|
||||
var params = {
|
||||
id: editEndpointDialog.currentId,
|
||||
uri: $("#epUri").val(),
|
||||
name: $("#epName").val()
|
||||
};
|
||||
|
||||
$.post("/Config/SetEndpointAjax", params, function (s) {
|
||||
if (s) {
|
||||
updateEndpointsResults();
|
||||
showAlertDialog("Roblox", "WCF Endpoint was saved");
|
||||
}
|
||||
else {
|
||||
showAlertDialog("Error", "WCF Endpoint was NOT saved!");
|
||||
}
|
||||
|
||||
editEndpointDialog.dialog("close");
|
||||
});
|
||||
|
||||
},
|
||||
"Cancel": function () {
|
||||
editEndpointDialog.dialog("close");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$("#CreateNewEndpointAddressButton").click(function () {
|
||||
$("#epId").val("Set Automatically");
|
||||
$("#epName").val("");
|
||||
$("#epUri").val("");
|
||||
|
||||
editEndpointDialog.currentId = -1;
|
||||
editEndpointDialog.dialog("option", "title", "Create WCF Endpoint");
|
||||
editEndpointDialog.dialog("open");
|
||||
});
|
||||
|
||||
$("#endpointsResultsDiv a:contains('Edit')").live("click", function () {
|
||||
var id = $(this).closest("tr").data("id");
|
||||
$.getJSON("/Config/GetEndpointAjax?id=" + id, function (s) {
|
||||
$("#epId").val(s.ID);
|
||||
$("#epName").val(s.EndpointConfigurationName);
|
||||
$("#epUri").val(s.Uri);
|
||||
editEndpointDialog.currentId = id;
|
||||
editEndpointDialog.dialog("option", "title", "Edit WCF Endpoint");
|
||||
editEndpointDialog.dialog("open");
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
$("#endpointsResultsDiv a:contains('Delete')").live("click", function () {
|
||||
var id = $(this).closest("tr").data("id");
|
||||
return showDeleteDialog("/Config/DeleteEndpointAjax", id, "Are you sure you want to delete this WCF endpoint?", updateEndpointsResults);
|
||||
});
|
||||
|
||||
|
||||
return {
|
||||
init: init
|
||||
};
|
||||
};
|
||||
});
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
$(function () {
|
||||
$("#ShutdownDialog").dialog({
|
||||
autoOpen: false,
|
||||
height: 200,
|
||||
width: 500,
|
||||
modal: true,
|
||||
buttons: {
|
||||
"Confirm": function () {
|
||||
if ($("#ShutdownDialogInput").val().toLowerCase() != "yes") {
|
||||
$("#ShutdownDialogError").show();
|
||||
return;
|
||||
}
|
||||
$("button").button("disable");
|
||||
$("#ShutdownDisplaynameInput").val($(this).data("display-name"));
|
||||
$("#ShutdownValueInput").val($(this).data("value"));
|
||||
$("#ShutdownForm").submit();
|
||||
},
|
||||
"Cancel": function () {
|
||||
$(this).dialog("close");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$(".shutdownButton").button().click(function () {
|
||||
var shutdownDialog = $("#ShutdownDialog");
|
||||
var dataValue = $(this).data("value");
|
||||
shutdownDialog.data("value", dataValue);
|
||||
var dataDisplayName = $(this).data("display-name");
|
||||
shutdownDialog.data("display-name", dataDisplayName);
|
||||
if (dataValue == "True") {
|
||||
$("#ShutdownDialogText").text("Are you sure you want to activate " + dataDisplayName + "? Type \"yes\" to continue.");
|
||||
} else {
|
||||
$("#ShutdownDialogText").text("Are you sure you want to shutdown " + dataDisplayName + "? Type \"yes\" to continue.");
|
||||
}
|
||||
$("#ShutdownDialogInput").val("");
|
||||
$("#ShutdownDialogError").hide();
|
||||
shutdownDialog.dialog("open");
|
||||
});
|
||||
})
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
$(function () {
|
||||
$("span[data-make-button], input[data-make-button]").button();
|
||||
|
||||
var appVersionForm = document.getElementById("app-version-form");
|
||||
|
||||
var appVersionDialog = $("#app-version-dialog").dialog({
|
||||
modal: true,
|
||||
resizable: false,
|
||||
width: 520,
|
||||
autoOpen: false,
|
||||
buttons: {
|
||||
"Save": function () {
|
||||
appVersionForm.submit();
|
||||
},
|
||||
"Cancel": function () {
|
||||
appVersionDialog.dialog("close");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$("a[data-edit-app-version]").click(function () {
|
||||
var anchor = $(this);
|
||||
$("#app-version-id").val(anchor.data("id"));
|
||||
$("#app-version-value").val(anchor.data("value"));
|
||||
$("#app-version-platform-type-id").val(anchor.data("platform-type-id"));
|
||||
$("#app-version-status-type-id").val(anchor.data("status-type-id"));
|
||||
$("#app-version-description").val(anchor.data("description"));
|
||||
appVersionDialog.dialog("option", "title", "Edit App Version");
|
||||
appVersionDialog.dialog("open");
|
||||
return false;
|
||||
});
|
||||
|
||||
$("#create-new-app-version-button").click(function () {
|
||||
appVersionForm.reset();
|
||||
appVersionDialog.dialog("option", "title", "Create App Version");
|
||||
appVersionDialog.dialog("open");
|
||||
});
|
||||
|
||||
|
||||
///////// security versions ////////
|
||||
var securityVersionForm = document.getElementById("security-version-form");
|
||||
|
||||
var securityVersionDialog = $("#security-version-dialog").dialog({
|
||||
modal: true,
|
||||
resizable: false,
|
||||
width: 520,
|
||||
autoOpen: false,
|
||||
buttons: {
|
||||
"Save": function () {
|
||||
securityVersionForm.submit();
|
||||
},
|
||||
"Cancel": function () {
|
||||
securityVersionDialog.dialog("close");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$("a[data-edit-security-version]").click(function () {
|
||||
var anchor = $(this);
|
||||
$("#security-version-id").val(anchor.data("id"));
|
||||
$("#security-version-value").val(anchor.data("value"));
|
||||
$("#security-version-is-valid").val(anchor.data("is-valid"));
|
||||
$("#security-version-description").val(anchor.data("description"));
|
||||
securityVersionDialog.dialog("option", "title", "Edit Security Version");
|
||||
securityVersionDialog.dialog("open");
|
||||
return false;
|
||||
});
|
||||
|
||||
$("#create-new-security-version-button").click(function () {
|
||||
securityVersionForm.reset();
|
||||
securityVersionDialog.dialog("option", "title", "Create Security Version");
|
||||
securityVersionDialog.dialog("open");
|
||||
});
|
||||
});
|
||||
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
$(function () {
|
||||
|
||||
$.extend($.ui.accordion.animations, {
|
||||
myslide: function (options) {
|
||||
$.ui.accordion.animations.slide(options, { duration: 400 });
|
||||
}
|
||||
});
|
||||
|
||||
$("#accordion").accordion({ autoHeight: false, collapsible: true, animated: "myslide" });
|
||||
|
||||
});
|
||||
|
|
@ -0,0 +1,203 @@
|
|||
if (typeof Roblox === "undefined") {
|
||||
Roblox = {};
|
||||
}
|
||||
if (typeof Roblox.Admi === "undefined") {
|
||||
Roblox.Admi = {};
|
||||
}
|
||||
if (typeof Roblox.Admi.Billing === "undefined") {
|
||||
Roblox.Admi.Billing = {};
|
||||
}
|
||||
Roblox.Admi.Billing.Merchant = function () {
|
||||
|
||||
//variables
|
||||
var pageSize, pageNum, totalNum;
|
||||
|
||||
//run on document load
|
||||
$(function () {
|
||||
var numMerchants = $("#dataHolder").data("merchant-count");
|
||||
initialize(20, 1, numMerchants);
|
||||
getMerchants();
|
||||
$('.MerchActive .checkbox').live("click", Roblox.Admi.Billing.Merchant.changeActive);
|
||||
$('.merch-hidden .checkbox').live("click", Roblox.Admi.Billing.Merchant.changeHidden);
|
||||
$('.MerchCountry select').change(Roblox.Admi.Billing.Merchant.changeCountry);
|
||||
});
|
||||
|
||||
//private methods
|
||||
|
||||
function getMerchants() {
|
||||
var startRow = (pageNum - 1) * pageSize + 1;
|
||||
var reqData = { startRowIndex: startRow, maxRows: pageSize };
|
||||
var url = "/merchants/get-merchants";
|
||||
$.post(url, reqData, function(data) {
|
||||
if (data.success) {
|
||||
displayMerchants(data.merchants, data.countryMerchants);
|
||||
} else {
|
||||
$("#ErrorText").text("Error retrieving Merchant records.");
|
||||
$("#ErrorDiv").show();
|
||||
}
|
||||
});
|
||||
}
|
||||
function unwrapMerchant(merchant) {
|
||||
return {
|
||||
id: merchant.ID,
|
||||
name: merchant.Name,
|
||||
active: merchant.Active,
|
||||
hidden: merchant.IsHidden,
|
||||
created: dateHelper(merchant.Created),
|
||||
updated: dateHelper(merchant.Updated)
|
||||
}
|
||||
}
|
||||
function dateHelper(unclean) {
|
||||
var clean = eval(unclean.substring(6, 19));
|
||||
var date = new Date(clean);
|
||||
return (date.getMonth() + 1) + "/" + date.getDate() + "/" + date.getFullYear();
|
||||
}
|
||||
function displayMerchants(merchants, countryMerchants) {
|
||||
//clean out old list
|
||||
$('#MerchTable').detach();
|
||||
$('#.pager').children().remove();
|
||||
|
||||
//add new Merchants
|
||||
var counter = 0;
|
||||
var newTable = $("#tableTemplate").clone(true).attr('id', 'MerchTable').show();
|
||||
while (merchants[counter] != null) {
|
||||
var merchant = unwrapMerchant(merchants[counter]);
|
||||
var newRow = $("#trTemplate").clone(true).show().attr('id', merchant.id);
|
||||
|
||||
$("div.MerchID", newRow).text(merchant.id);
|
||||
$("div.MerchName", newRow).text(merchant.name);
|
||||
$("div.MerchActive", newRow).children().attr('checked', merchant.active).attr('id', merchant.id);
|
||||
$("div.merch-hidden", newRow).children().attr('checked', merchant.hidden).attr('id', merchant.id);
|
||||
$("div.MerchCreated", newRow).text(merchant.created);
|
||||
$("div.MerchUpdated", newRow).text(merchant.updated);
|
||||
$("div.MerchCountry select", newRow).val(countryMerchants[merchant.name]).attr('id', merchant.id);
|
||||
newRow.show();
|
||||
newTable.append(newRow);
|
||||
counter++;
|
||||
}
|
||||
$('#Merchants').append(newTable);
|
||||
|
||||
$("#pager").html('').hide();
|
||||
if (totalNum > pageSize) {
|
||||
var endPage = Math.ceil(totalNum / pageSize);
|
||||
var endPageGroup = Math.ceil(endPage / pageSize);
|
||||
var currentPageGroup = Math.ceil(pageNum / pageSize);
|
||||
var startIndex = (((currentPageGroup - 1) * pageSize) + 1)
|
||||
var endIndex = (currentPageGroup * pageSize)
|
||||
if (currentPageGroup != 1) {
|
||||
$("#pager").append('<a onclick="Roblox.Admi.Billing.Merchant.changePage(' + ((currentPageGroup * pageSize) - 1) + ')" style="padding: 5px; cursor: pointer">...</a>');
|
||||
}
|
||||
|
||||
for (var j = startIndex; j <= endIndex; j++) {
|
||||
if (j > endPage) {
|
||||
break;
|
||||
}
|
||||
else if (j == pageNum) {
|
||||
$("#pager").append('<span style="font-weight:bold;padding: 1px">' + j + '</span>');
|
||||
}
|
||||
else {
|
||||
$("#pager").append('<a onclick="Roblox.Admi.Billing.Merchant.changePage(' + j + ')" style="padding: 5px; cursor: pointer">' + j + '</a>');
|
||||
}
|
||||
}
|
||||
if (currentPageGroup < endPageGroup) {
|
||||
$("#pager").append('<a Roblox.Admi.Billing.Merchant.changePage(' + ((currentPageGroup * pageSize) + 1) + ')" style="padding: 5px; cursor: pointer">...</a>').show();
|
||||
}
|
||||
|
||||
$('#pager').show();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//public methods
|
||||
function initialize(pagesize, pagenum, totalnum) {
|
||||
pageSize = pagesize;
|
||||
pageNum = pagenum;
|
||||
totalNum = totalnum;
|
||||
}
|
||||
function changePage(newPage) {
|
||||
pageNum = newPage;
|
||||
$('#ErrorDiv').hide();
|
||||
$('#SuccessDiv').hide();
|
||||
getMerchants();
|
||||
}
|
||||
|
||||
function changeActive() {
|
||||
var id = this.id;
|
||||
var checked = this.checked;
|
||||
var url = "/merchants/" + id + "/update?active=" + checked;
|
||||
$.post(url, function(data) {
|
||||
if (data.success) {
|
||||
$('#SuccessText').text(data.message);
|
||||
$('#SuccessDiv').show();
|
||||
} else {
|
||||
$('#ErrorText').text(data.message);
|
||||
$('#ErrorDiv').show();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function changeHidden() {
|
||||
var id = this.id;
|
||||
var checked = this.checked;
|
||||
var url = "/merchants/" + id + "/update?hidden=" + checked;
|
||||
$.post(url, function (data) {
|
||||
if (data.success) {
|
||||
$('#SuccessText').text(data.message);
|
||||
$('#SuccessDiv').show();
|
||||
} else {
|
||||
$('#ErrorText').text(data.message);
|
||||
$('#ErrorDiv').show();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function changeCountry() {
|
||||
var id = this.id;
|
||||
var countryID = $(this).children(":selected").val();
|
||||
var url = "/merchants/" + id + "/update?countryID=" + countryID;
|
||||
$.post(url, function(data) {
|
||||
if (data.success) {
|
||||
$('#SuccessText').text(data.message);
|
||||
$('#SuccessDiv').show();
|
||||
} else {
|
||||
$('#ErrorText').text(data.message);
|
||||
$('#ErrorDiv').show();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function createMerchant() {
|
||||
$('#SuccessDiv').hide();
|
||||
$('#ErrorDiv').hide();
|
||||
var name = $('.merchantNameInput').val();
|
||||
var active = ($('#merchantActive').attr('checked') === "checked");
|
||||
var countryID = $('#merchantCountry').children(":selected").attr("id");
|
||||
var reqData = { merchantName: name, merchantActive: active, merchantCountryID: countryID };
|
||||
var url = "/merchants/add-merchant";
|
||||
$.post(url, reqData, function(data) {
|
||||
if (data.success) {
|
||||
$('.merchantNameInput').val('');
|
||||
$('#merchantActive').prop('checked', false);
|
||||
$('#merchantCountry option').eq(0).prop('selected', true);
|
||||
totalNum++;
|
||||
changePage(Math.ceil(totalNum / pageSize));
|
||||
var msg = 'Successfully added ' + name + ' to the database.';
|
||||
$('#SuccessText').text(msg);
|
||||
$('#SuccessDiv').show();
|
||||
displayMerchants(data.merchants, data.countryMerchants);
|
||||
} else {
|
||||
$('#ErrorText').text(data.message);
|
||||
$('#ErrorDiv').show();
|
||||
}
|
||||
});
|
||||
}
|
||||
//Interface exposing public methods!
|
||||
return {
|
||||
initialize: initialize,
|
||||
changeActive: changeActive,
|
||||
changeHidden: changeHidden,
|
||||
createMerchant: createMerchant,
|
||||
changePage: changePage,
|
||||
changeCountry: changeCountry
|
||||
}
|
||||
} ();
|
||||
|
|
@ -0,0 +1,165 @@
|
|||
/// <reference path="jquery-1.7.1.js" />
|
||||
|
||||
/*!
|
||||
** Unobtrusive Ajax support library for jQuery
|
||||
** Copyright (C) Microsoft Corporation. All rights reserved.
|
||||
*/
|
||||
|
||||
/*jslint white: true, browser: true, onevar: true, undef: true, nomen: true, eqeqeq: true, plusplus: true, bitwise: true, regexp: true, newcap: true, immed: true, strict: false */
|
||||
/*global window: false, jQuery: false */
|
||||
|
||||
(function ($) {
|
||||
var data_click = "unobtrusiveAjaxClick",
|
||||
data_validation = "unobtrusiveValidation";
|
||||
|
||||
function getFunction(code, argNames) {
|
||||
var fn = window, parts = (code || "").split(".");
|
||||
while (fn && parts.length) {
|
||||
fn = fn[parts.shift()];
|
||||
}
|
||||
if (typeof (fn) === "function") {
|
||||
return fn;
|
||||
}
|
||||
argNames.push(code);
|
||||
return Function.constructor.apply(null, argNames);
|
||||
}
|
||||
|
||||
function isMethodProxySafe(method) {
|
||||
return method === "GET" || method === "POST";
|
||||
}
|
||||
|
||||
function asyncOnBeforeSend(xhr, method) {
|
||||
if (!isMethodProxySafe(method)) {
|
||||
xhr.setRequestHeader("X-HTTP-Method-Override", method);
|
||||
}
|
||||
}
|
||||
|
||||
function asyncOnSuccess(element, data, contentType) {
|
||||
var mode;
|
||||
|
||||
if (contentType.indexOf("application/x-javascript") !== -1) { // jQuery already executes JavaScript for us
|
||||
return;
|
||||
}
|
||||
|
||||
mode = (element.getAttribute("data-ajax-mode") || "").toUpperCase();
|
||||
$(element.getAttribute("data-ajax-update")).each(function (i, update) {
|
||||
var top;
|
||||
|
||||
switch (mode) {
|
||||
case "BEFORE":
|
||||
top = update.firstChild;
|
||||
$("<div />").html(data).contents().each(function () {
|
||||
update.insertBefore(this, top);
|
||||
});
|
||||
break;
|
||||
case "AFTER":
|
||||
$("<div />").html(data).contents().each(function () {
|
||||
update.appendChild(this);
|
||||
});
|
||||
break;
|
||||
default:
|
||||
$(update).html(data);
|
||||
break;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function asyncRequest(element, options) {
|
||||
var confirm, loading, method, duration;
|
||||
|
||||
confirm = element.getAttribute("data-ajax-confirm");
|
||||
if (confirm && !window.confirm(confirm)) {
|
||||
return;
|
||||
}
|
||||
|
||||
loading = $(element.getAttribute("data-ajax-loading"));
|
||||
duration = element.getAttribute("data-ajax-loading-duration") || 0;
|
||||
|
||||
$.extend(options, {
|
||||
type: element.getAttribute("data-ajax-method") || undefined,
|
||||
url: element.getAttribute("data-ajax-url") || undefined,
|
||||
beforeSend: function (xhr) {
|
||||
var result;
|
||||
asyncOnBeforeSend(xhr, method);
|
||||
result = getFunction(element.getAttribute("data-ajax-begin"), ["xhr"]).apply(this, arguments);
|
||||
if (result !== false) {
|
||||
loading.show(duration);
|
||||
}
|
||||
return result;
|
||||
},
|
||||
complete: function () {
|
||||
loading.hide(duration);
|
||||
getFunction(element.getAttribute("data-ajax-complete"), ["xhr", "status"]).apply(this, arguments);
|
||||
},
|
||||
success: function (data, status, xhr) {
|
||||
asyncOnSuccess(element, data, xhr.getResponseHeader("Content-Type") || "text/html");
|
||||
getFunction(element.getAttribute("data-ajax-success"), ["data", "status", "xhr"]).apply(this, arguments);
|
||||
},
|
||||
error: getFunction(element.getAttribute("data-ajax-failure"), ["xhr", "status", "error"])
|
||||
});
|
||||
|
||||
options.data.push({ name: "X-Requested-With", value: "XMLHttpRequest" });
|
||||
|
||||
method = options.type.toUpperCase();
|
||||
if (!isMethodProxySafe(method)) {
|
||||
options.type = "POST";
|
||||
options.data.push({ name: "X-HTTP-Method-Override", value: method });
|
||||
}
|
||||
|
||||
$.ajax(options);
|
||||
}
|
||||
|
||||
function validate(form) {
|
||||
var validationInfo = $(form).data(data_validation);
|
||||
return !validationInfo || !validationInfo.validate || validationInfo.validate();
|
||||
}
|
||||
|
||||
$("a[data-ajax=true]").live("click", function (evt) {
|
||||
evt.preventDefault();
|
||||
asyncRequest(this, {
|
||||
url: this.href,
|
||||
type: "GET",
|
||||
data: []
|
||||
});
|
||||
});
|
||||
|
||||
$("form[data-ajax=true] input[type=image]").live("click", function (evt) {
|
||||
var name = evt.target.name,
|
||||
$target = $(evt.target),
|
||||
form = $target.parents("form")[0],
|
||||
offset = $target.offset();
|
||||
|
||||
$(form).data(data_click, [
|
||||
{ name: name + ".x", value: Math.round(evt.pageX - offset.left) },
|
||||
{ name: name + ".y", value: Math.round(evt.pageY - offset.top) }
|
||||
]);
|
||||
|
||||
setTimeout(function () {
|
||||
$(form).removeData(data_click);
|
||||
}, 0);
|
||||
});
|
||||
|
||||
$("form[data-ajax=true] :submit").live("click", function (evt) {
|
||||
var name = evt.target.name,
|
||||
form = $(evt.target).parents("form")[0];
|
||||
|
||||
$(form).data(data_click, name ? [{ name: name, value: evt.target.value }] : []);
|
||||
|
||||
setTimeout(function () {
|
||||
$(form).removeData(data_click);
|
||||
}, 0);
|
||||
});
|
||||
|
||||
$("form[data-ajax=true]").live("submit", function (evt) {
|
||||
var clickInfo = $(this).data(data_click) || [];
|
||||
evt.preventDefault();
|
||||
if (!validate(this)) {
|
||||
return;
|
||||
}
|
||||
asyncRequest(this, {
|
||||
url: this.action,
|
||||
type: this.method || "GET",
|
||||
data: clickInfo.concat($(this).serializeArray())
|
||||
});
|
||||
});
|
||||
}(jQuery));
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
/*
|
||||
** Unobtrusive Ajax support library for jQuery
|
||||
** Copyright (C) Microsoft Corporation. All rights reserved.
|
||||
*/
|
||||
(function(a){var b="unobtrusiveAjaxClick",g="unobtrusiveValidation";function c(d,b){var a=window,c=(d||"").split(".");while(a&&c.length)a=a[c.shift()];if(typeof a==="function")return a;b.push(d);return Function.constructor.apply(null,b)}function d(a){return a==="GET"||a==="POST"}function f(b,a){!d(a)&&b.setRequestHeader("X-HTTP-Method-Override",a)}function h(c,b,e){var d;if(e.indexOf("application/x-javascript")!==-1)return;d=(c.getAttribute("data-ajax-mode")||"").toUpperCase();a(c.getAttribute("data-ajax-update")).each(function(f,c){var e;switch(d){case"BEFORE":e=c.firstChild;a("<div />").html(b).contents().each(function(){c.insertBefore(this,e)});break;case"AFTER":a("<div />").html(b).contents().each(function(){c.appendChild(this)});break;default:a(c).html(b)}})}function e(b,e){var j,k,g,i;j=b.getAttribute("data-ajax-confirm");if(j&&!window.confirm(j))return;k=a(b.getAttribute("data-ajax-loading"));i=b.getAttribute("data-ajax-loading-duration")||0;a.extend(e,{type:b.getAttribute("data-ajax-method")||undefined,url:b.getAttribute("data-ajax-url")||undefined,beforeSend:function(d){var a;f(d,g);a=c(b.getAttribute("data-ajax-begin"),["xhr"]).apply(this,arguments);a!==false&&k.show(i);return a},complete:function(){k.hide(i);c(b.getAttribute("data-ajax-complete"),["xhr","status"]).apply(this,arguments)},success:function(a,e,d){h(b,a,d.getResponseHeader("Content-Type")||"text/html");c(b.getAttribute("data-ajax-success"),["data","status","xhr"]).apply(this,arguments)},error:c(b.getAttribute("data-ajax-failure"),["xhr","status","error"])});e.data.push({name:"X-Requested-With",value:"XMLHttpRequest"});g=e.type.toUpperCase();if(!d(g)){e.type="POST";e.data.push({name:"X-HTTP-Method-Override",value:g})}a.ajax(e)}function i(c){var b=a(c).data(g);return!b||!b.validate||b.validate()}a("a[data-ajax=true]").live("click",function(a){a.preventDefault();e(this,{url:this.href,type:"GET",data:[]})});a("form[data-ajax=true] input[type=image]").live("click",function(c){var g=c.target.name,d=a(c.target),f=d.parents("form")[0],e=d.offset();a(f).data(b,[{name:g+".x",value:Math.round(c.pageX-e.left)},{name:g+".y",value:Math.round(c.pageY-e.top)}]);setTimeout(function(){a(f).removeData(b)},0)});a("form[data-ajax=true] :submit").live("click",function(c){var e=c.target.name,d=a(c.target).parents("form")[0];a(d).data(b,e?[{name:e,value:c.target.value}]:[]);setTimeout(function(){a(d).removeData(b)},0)});a("form[data-ajax=true]").live("submit",function(d){var c=a(this).data(b)||[];d.preventDefault();if(!i(this))return;e(this,{url:this.action,type:this.method||"GET",data:c.concat(a(this).serializeArray())})})})(jQuery);
|
||||
|
|
@ -0,0 +1,318 @@
|
|||
<html class="adminStyle">
|
||||
<head id="ctl00_Head1">
|
||||
<meta id="ctl00_RenderingMode" http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<title>
|
||||
ROBLOX | Administration
|
||||
</title>
|
||||
<meta name="google-site-verification" content="alM52ZeUABx_edKTvoawL3_tQ4VVr49r7IjWdBFMKPA">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/Roblox.css">
|
||||
<link rel="stylesheet" href="/CSS/RBXCommon.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/AccountBalance.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/Admin.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/Admin2.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/Ads.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/AgeUpEmailVerifyPage.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/Asset.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/Badges.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/carouselpager.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/Catalog.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/CharacterCustomization.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/CharacterSelectAndInstallInstructions.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/CommonForms.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/ContentAdapters.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/ContentBuilder.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/Contest.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/CreditCardExpireModal.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/CuratedGames.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/CurrencyExchange.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/DarkGradientBox.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/Frontpage.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/Games.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/GenericModal.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/GroupRoleSetMembersPane.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/Groups.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/Help.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/IframeHeader.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/iFrameLogin.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/Inbox.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/Info.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/Install.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/Item.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/LandingGames.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/LinkInventory.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/ManageAccount.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/Membership.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/MenuRedesign.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/Message.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/MyAccount.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/MyMoney.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/NewCatalog.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/NewToolBox.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/Parents.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/party.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/PersonalServerAccessPrivilegesRoleSet.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/Place.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/PlaceLauncher.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/Profile.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/Q.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/RevisedCharacterSelectModal.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/Sets.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/ShadowedStandardBox.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/ShareRoblox.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/Signup.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/Store.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/Studio2Alert.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/StyleGuide.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/tipsy.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/Toolbox.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/Trade.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/UnifiedModal.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/Upgrades.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/Upload.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/User.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/Utility.css">
|
||||
<link rel="stylesheet" href="/CSS/Base/CSS/VideoPreRoll.css">
|
||||
<link rel="stylesheet" href="/CSS/RBX2/CSS/BuildersClub.css">
|
||||
<link rel="stylesheet" href="/CSS/RBX2/CSS/Catalog.css">
|
||||
<link rel="stylesheet" href="/CSS/RBX2/CSS/DarkGradientBox.css">
|
||||
<link rel="stylesheet" href="/CSS/RBX2/CSS/Games.css">
|
||||
<link rel="stylesheet" href="/CSS/RBX2/CSS/Inbox.css">
|
||||
<link rel="stylesheet" href="/CSS/RBX2/CSS/Item.css">
|
||||
<link rel="stylesheet" href="/CSS/RBX2/CSS/MyRoblox.css">
|
||||
<link rel="stylesheet" href="/CSS/RBX2/CSS/Roblox.css">
|
||||
<link rel="stylesheet" href="/CSS/RBX2/CSS/Upgrades.css">
|
||||
<link rel="stylesheet" href="/CSS/RBX2/CSS/Utility.css">
|
||||
<style type="text/css">
|
||||
html, body {
|
||||
height: 100%;
|
||||
}
|
||||
#master_container {
|
||||
height: 100%;
|
||||
}
|
||||
#sidebar {
|
||||
background: #eaeaea;
|
||||
float: left;
|
||||
height: 100%;
|
||||
width: 196px;
|
||||
line-height: 1.1;
|
||||
border-right: solid 1px #000;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.center {
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
width: 50%;
|
||||
}
|
||||
.adminContent .spacer {
|
||||
clear: unset;
|
||||
}
|
||||
|
||||
/* ============= TEXT ============ */
|
||||
|
||||
.adminStyle h2 {
|
||||
font-weight: bold;
|
||||
font-size:12px;
|
||||
color:#000;
|
||||
padding-bottom: 0;
|
||||
margin-bottom: 0;
|
||||
/*padding-bottom:5px;
|
||||
margin-bottom:14px;*/
|
||||
border-bottom:1px solid #e1eaf3;
|
||||
}
|
||||
|
||||
.adminStyle h2.highlight {
|
||||
font-weight: bold;
|
||||
font-size:12px;
|
||||
color:#1a773b;
|
||||
padding-bottom: 0;
|
||||
margin: 0;
|
||||
/*padding-bottom:5px;
|
||||
margin:30px 0 5px 0;*/
|
||||
border-bottom:1px solid #e1eaf3;
|
||||
}
|
||||
|
||||
|
||||
.adminStyle h3 {
|
||||
font-size:11px;
|
||||
font-weight: bold;
|
||||
color:#000;
|
||||
margin: 0;
|
||||
/*margin-top:30px;*/
|
||||
}
|
||||
.adminStyle h3.less_air {
|
||||
font-size:11px;
|
||||
font-weight: bold;
|
||||
color:#000;
|
||||
margin: 0;
|
||||
/*margin:0 0 4px 0;*/
|
||||
padding:0;
|
||||
}
|
||||
|
||||
|
||||
.adminStyle h4 {
|
||||
font-size:10px;
|
||||
font-weight: bold;
|
||||
color:#000;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
/*margin:15px 0 4px 0;
|
||||
padding:0 0 2px 0;*/
|
||||
border-bottom:1px solid #e1eaf3;
|
||||
}
|
||||
</style>
|
||||
<link rel="icon" type="image/vnd.microsoft.icon" href="/favicon.ico">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<meta http-equiv="Content-Language" content="en-us">
|
||||
<meta name="author" content="ROBLOX Corporation">
|
||||
<meta id="ctl00_metadescription" name="description" content="User-generated MMO gaming site for kids, teens, and adults. Players architect their own worlds. Builders create free online games that simulate the real world. Create and play amazing 3D games. An online gaming cloud and distributed physics engine.">
|
||||
<meta id="ctl00_metakeywords" name="keywords" content="free games, online games, building games, virtual worlds, free mmo, gaming cloud, physics engine">
|
||||
<script type="text/javascript" async="" src="https://ssl.google-analytics.com/ga.js"></script><script type="text/javascript">
|
||||
var _gaq = _gaq || [];
|
||||
_gaq.push(['_setAccount', 'UA-11419793-1']);
|
||||
_gaq.push(['_setCampSourceKey', 'rbx_source']);
|
||||
_gaq.push(['_setCampMediumKey', 'rbx_medium']);
|
||||
_gaq.push(['_setCampContentKey', 'rbx_campaign']);
|
||||
|
||||
|
||||
|
||||
_gaq.push(['b._setAccount', 'UA-486632-1']);
|
||||
_gaq.push(['b._setCampSourceKey', 'rbx_source']);
|
||||
_gaq.push(['b._setCampMediumKey', 'rbx_medium']);
|
||||
_gaq.push(['b._setCampContentKey', 'rbx_campaign']);
|
||||
|
||||
|
||||
_gaq.push(['c._setAccount', 'UA-26810151-2']);
|
||||
|
||||
|
||||
(function() {
|
||||
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
||||
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
||||
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
||||
})();
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body class="pageStyle">
|
||||
<div id="master_container">
|
||||
<div id="sidebar">
|
||||
<div style="padding-left: 11px;">
|
||||
<div style="padding-right: 11px; padding-top: 11px;">
|
||||
<div class="logo_spacer" style="width: auto; height: 50px; padding-right: 4px;">
|
||||
<a href="/" style="
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
width: 106px;
|
||||
height: 28px;
|
||||
">
|
||||
<img width="106px" height="28px" src="/Images/roblox_logo.png">
|
||||
</a>
|
||||
</div>
|
||||
<div>
|
||||
<div>
|
||||
<div>
|
||||
<a>Configs</a> | <a>Machines</a>: <b>99</b>% of <b>1346</b>
|
||||
</div>
|
||||
<div>
|
||||
<a>Cores</a>: <b>69</b>% in use of <b>6466</b>
|
||||
</div>
|
||||
<div>
|
||||
<b>4529</b> running, <b>0</b> waiting
|
||||
</div>
|
||||
<div>
|
||||
<b>19715</b> <a>players</a> in <b>4721</b> <a>games</a> (<b>4.7:1</b>)
|
||||
</div>
|
||||
<div>
|
||||
<b>7</b> <a>thumb requests</a>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<hr>
|
||||
<div>
|
||||
<h6><b>11</b> <a>abuse reports</a>, </h6>
|
||||
<h6><b>44</b> <a>images</a>, </h6>
|
||||
<h6><b>5</b> <a>videos</a>, </h6>
|
||||
<h6><b>74</b> <a>users</a></h6>
|
||||
</div>
|
||||
<div>
|
||||
<a href="/">Roblox</a>, <a>FindUser</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="padding-right: 2px;">
|
||||
<hr>
|
||||
<div style="padding-right: 6px;">
|
||||
<div>
|
||||
<a>Change Theme</a>
|
||||
</div>
|
||||
<div>
|
||||
<a>RBX1</a> <a>RBX2</a> <a>RBX3</a> <a>OBC1</a> <a>OBC2</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="right "style="padding-right: 10px; width:100%; text-align:right;">
|
||||
<a class="highlight">Stop Chat</a> <a class="highlight">Pause Polling</a>
|
||||
</div>
|
||||
</div>
|
||||
<div style="margin-top:28px;">
|
||||
<ul style="overflow:hidden; overflow-y:scroll; width:auto;">
|
||||
<li><a>Admin Dashboard</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div style="margin-left: 196px;">
|
||||
<div class="Panel" style="
|
||||
padding-top: 10px;
|
||||
border: none;
|
||||
">
|
||||
<div class="adminContent" style="
|
||||
margin-top: 0;
|
||||
padding-top: 1.6em;
|
||||
">
|
||||
<p>Thumbnail Request Count: 2</p>
|
||||
<p>Total Count: 0</p>
|
||||
<p>Thumbnail Blacklist Count: 0</p>
|
||||
<div class="spacer"></div>
|
||||
<p>Failure Rate: NaN% Timeout Rate: NaN%</p>
|
||||
<button>
|
||||
Clear Blacklist
|
||||
</button>
|
||||
|
||||
<!--div>
|
||||
<h3>Very Epic Administration Buttons</h3>
|
||||
<div class="panel_buttons">
|
||||
<div class="button_small_gray">
|
||||
<span class="button_small_gray_left"></span><span class="button_small_gray_content">
|
||||
Gray
|
||||
</span><span class="button_small_gray_right"></span>
|
||||
</div>
|
||||
<div class="button_blue">
|
||||
<span class="button_blue_left"></span><span class="button_blue_content">
|
||||
Blue
|
||||
</span><span class="button_blue_right"></span>
|
||||
</div>
|
||||
<div class="button_black">
|
||||
<span class="button_black_left"></span><span class="button_black_content">
|
||||
Black
|
||||
</span><span class="button_black_right"></span>
|
||||
</div>
|
||||
<div class="button_gray">
|
||||
<span class="button_gray_left"></span><span class="button_gray_content">
|
||||
Gray
|
||||
</span><span class="button_gray_right"></span>
|
||||
</div>
|
||||
<div class="button_glossy">
|
||||
<span class="button_glossy_left"></span><span class="button_glossy_content">
|
||||
Glossy
|
||||
</span><span class="button_glossy_right"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div-->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
After Width: | Height: | Size: 1.8 KiB |
|
|
@ -0,0 +1,116 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title></title>
|
||||
<script type="text/javascript" src="/UnsecureContent/js/jquery-1.7.2.min.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<object id="robloxpluginobj" type="application/x-vnd-roblox-launcher"><p>You need Our Plugin for this. Get the latest version from<a href="setup-sitetest.roblox.com">here</a>.</p></object>
|
||||
<p><input type="text" size="20" id="placeID" value="91388704" /></p>
|
||||
<input type="button" value="Get game URLs" onclick="getGameUrls();" />
|
||||
<input type="button" value="Start game normal" onclick="startGameNormal();" />
|
||||
<input type="button" value="Set game hidden" id="setGameHidden" onclick="setGameHidden();"/>
|
||||
<input type="button" value="Show hidden game" id="showHiddenGame" onclick="showHiddenGame();"/>
|
||||
<input type="button" value="Get game started status" onclick="getGameStarted()" />
|
||||
<p>Game request status: <span id="gameReqStatus">No game req.</span></p>
|
||||
<p>Game started status: <span id="gameStartedStatus">Unknown</span></p>
|
||||
<script type="text/javascript">
|
||||
var visitUrl = "";
|
||||
var authenticationUrl = "http://sitetest2.roblox.com/Login/Negotiate.ashx";
|
||||
|
||||
var launcher = document.getElementById("robloxpluginobj");
|
||||
function el(e) { return document.getElementById(e); };
|
||||
|
||||
function getGameUrls() {
|
||||
//launcher.PreStartGame();
|
||||
el("gameReqStatus").innerHTML = "Starting request...";
|
||||
RequestGame(el("placeID").value, false, null)
|
||||
}
|
||||
|
||||
function RequestGame(placeId, isPartyLeader, gender) {
|
||||
gender = (gender !== null && gender !== undefined) ? gender : "";
|
||||
$.getJSON("/Game/PlaceLauncher.ashx",
|
||||
{ request: "RequestGame", placeId: placeId, isPartyLeader: isPartyLeader, gender: gender },
|
||||
function (data) {
|
||||
if (data.Error) {
|
||||
el("gameReqStatus").innerHTML = data.Error.toString();
|
||||
}
|
||||
else {
|
||||
CheckGameJobStatusResponse(data);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function CheckGameJobStatus(jobId) {
|
||||
$.getJSON("/Game/PlaceLauncher.ashx",
|
||||
{ request: "CheckGameJobStatus", jobId: jobId },
|
||||
function (data) {
|
||||
if (data.Error) {
|
||||
el("gameReqStatus").innerHTML = data.Error.toString();
|
||||
}
|
||||
else {
|
||||
CheckGameJobStatusResponse(data);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function CheckGameJobStatusResponse(result) {
|
||||
if (result.status === 2) {
|
||||
visitUrl = result.joinScriptUrl;
|
||||
authenticationUrl = result.authenticationUrl;
|
||||
el("gameReqStatus").innerHTML = "Game is ready, <br>visit url=" + visitUrl + "<br>auth url=" + authenticationUrl;
|
||||
//RobloxLaunch.StartGame(result.joinScriptUrl, "Join", result.authenticationUrl, result.authenticationTicket);
|
||||
//$.modal.close();
|
||||
|
||||
//report length of time between click of join and successfully joining a game.
|
||||
//var s_duration = new Date().getTime() - RobloxLaunch.timer.getTime();
|
||||
//this._reportDuration(s_duration, "Success");
|
||||
|
||||
}
|
||||
else if (result.status < 2 || result.status === 6) {
|
||||
// Try again
|
||||
el("gameReqStatus").innerHTML = "Game is not ready. Retrying...";
|
||||
//var onSuccess = function (result, context) { context._onGameStatus(result); };
|
||||
//var onError = function (result, context) { context._onGameError(result); };
|
||||
//var self = this;
|
||||
var call = function () {
|
||||
CheckGameJobStatus(result.jobId);
|
||||
};
|
||||
window.setTimeout(call, 2000);
|
||||
} else if (result.status === 4) { //error
|
||||
//report length of time between click of join and failed joining a game.
|
||||
//var f_duration = new Date().getTime() - RobloxLaunch.timer.getTime();
|
||||
//this._reportDuration(f_duration, "Failure");
|
||||
el("gameReqStatus").innerHTML = "Got back a 4, failure. :-(";
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function startGameNormal() {
|
||||
launcher.SetSilentModeEnabled(true);
|
||||
launcher.StartGame(authenticationUrl, visitUrl);
|
||||
}
|
||||
|
||||
function setGameHidden() {
|
||||
launcher.SetStartInHiddenMode(true);
|
||||
el("setGameHidden").disabled = true;
|
||||
el("setGameHidden").value = "Game will start hidden";
|
||||
}
|
||||
|
||||
function showHiddenGame() {
|
||||
setInterval("launcher.UnhideApp();", 200);
|
||||
}
|
||||
|
||||
function getGameStarted() {
|
||||
var started = false;
|
||||
if (window.ActiveXObject) {
|
||||
started = launcher.IsGameStarted;
|
||||
} else {
|
||||
started = launcher.Get_GameStarted();
|
||||
}
|
||||
el("gameStartedStatus").innerHTML = started.toString();
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,117 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title></title>
|
||||
<script type="text/javascript" src="/UnsecureContent/js/jquery-1.7.2.min.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<!--<object id="robloxpluginobj" type="application/x-vnd-roblox-launcher"><p>You need Our Plugin for this. Get the latest version from<a href="setup-sitetest.roblox.com">here</a>.</p></object>-->
|
||||
<object classid="clsid:76D50904-6780-4c8b-8986-1A7EE0B1716D" id="robloxpluginobj" type="application/x-vnd-roblox-launcher" codebase="setup-sitetest.roblox.com">Failed to INIT Plugin</object>
|
||||
<p><input type="text" size="20" id="placeID" value="91388704" /></p>
|
||||
<input type="button" value="Get game URLs" onclick="getGameUrls();" />
|
||||
<input type="button" value="Start game normal" onclick="startGameNormal();" />
|
||||
<input type="button" value="Set game hidden" id="setGameHidden" onclick="setGameHidden();"/>
|
||||
<input type="button" value="Show hidden game" id="showHiddenGame" onclick="showHiddenGame();"/>
|
||||
<input type="button" value="Get game started status" onclick="getGameStarted()" />
|
||||
<p>Game request status: <span id="gameReqStatus">No game req.</span></p>
|
||||
<p>Game started status: <span id="gameStartedStatus">Unknown</span></p>
|
||||
<script type="text/javascript">
|
||||
var visitUrl = "";
|
||||
var authenticationUrl = "http://sitetest2.roblox.com/Login/Negotiate.ashx";
|
||||
|
||||
var launcher = document.getElementById("robloxpluginobj");
|
||||
function el(e) { return document.getElementById(e); };
|
||||
|
||||
function getGameUrls() {
|
||||
//launcher.PreStartGame();
|
||||
el("gameReqStatus").innerHTML = "Starting request...";
|
||||
RequestGame(el("placeID").value, false, null)
|
||||
}
|
||||
|
||||
function RequestGame(placeId, isPartyLeader, gender) {
|
||||
gender = (gender !== null && gender !== undefined) ? gender : "";
|
||||
$.getJSON("/Game/PlaceLauncher.ashx",
|
||||
{ request: "RequestGame", placeId: placeId, isPartyLeader: isPartyLeader, gender: gender },
|
||||
function (data) {
|
||||
if (data.Error) {
|
||||
el("gameReqStatus").innerHTML = data.Error.toString();
|
||||
}
|
||||
else {
|
||||
CheckGameJobStatusResponse(data);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function CheckGameJobStatus(jobId) {
|
||||
$.getJSON("/Game/PlaceLauncher.ashx",
|
||||
{ request: "CheckGameJobStatus", jobId: jobId },
|
||||
function (data) {
|
||||
if (data.Error) {
|
||||
el("gameReqStatus").innerHTML = data.Error.toString();
|
||||
}
|
||||
else {
|
||||
CheckGameJobStatusResponse(data);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function CheckGameJobStatusResponse(result) {
|
||||
if (result.status === 2) {
|
||||
visitUrl = result.joinScriptUrl;
|
||||
authenticationUrl = result.authenticationUrl;
|
||||
el("gameReqStatus").innerHTML = "Game is ready, <br>visit url=" + visitUrl + "<br>auth url=" + authenticationUrl;
|
||||
//RobloxLaunch.StartGame(result.joinScriptUrl, "Join", result.authenticationUrl, result.authenticationTicket);
|
||||
//$.modal.close();
|
||||
|
||||
//report length of time between click of join and successfully joining a game.
|
||||
//var s_duration = new Date().getTime() - RobloxLaunch.timer.getTime();
|
||||
//this._reportDuration(s_duration, "Success");
|
||||
|
||||
}
|
||||
else if (result.status < 2 || result.status === 6) {
|
||||
// Try again
|
||||
el("gameReqStatus").innerHTML = "Game is not ready. Retrying...";
|
||||
//var onSuccess = function (result, context) { context._onGameStatus(result); };
|
||||
//var onError = function (result, context) { context._onGameError(result); };
|
||||
//var self = this;
|
||||
var call = function () {
|
||||
CheckGameJobStatus(result.jobId);
|
||||
};
|
||||
window.setTimeout(call, 2000);
|
||||
} else if (result.status === 4) { //error
|
||||
//report length of time between click of join and failed joining a game.
|
||||
//var f_duration = new Date().getTime() - RobloxLaunch.timer.getTime();
|
||||
//this._reportDuration(f_duration, "Failure");
|
||||
el("gameReqStatus").innerHTML = "Got back a 4, failure. :-(";
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function startGameNormal() {
|
||||
launcher.SetSilentModeEnabled(true);
|
||||
launcher.StartGame(authenticationUrl, visitUrl);
|
||||
}
|
||||
|
||||
function setGameHidden() {
|
||||
launcher.SetStartInHiddenMode(true);
|
||||
el("setGameHidden").disabled = true;
|
||||
el("setGameHidden").value = "Game will start hidden";
|
||||
}
|
||||
|
||||
function showHiddenGame() {
|
||||
setInterval("launcher.UnhideApp();", 200);
|
||||
}
|
||||
|
||||
function getGameStarted() {
|
||||
var started = false;
|
||||
if (window.ActiveXObject) {
|
||||
started = launcher.IsGameStarted;
|
||||
} else {
|
||||
started = launcher.Get_GameStarted();
|
||||
}
|
||||
el("gameStartedStatus").innerHTML = started.toString();
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
After Width: | Height: | Size: 728 B |
|
After Width: | Height: | Size: 5.7 KiB |
|
After Width: | Height: | Size: 7.5 KiB |
|
After Width: | Height: | Size: 602 B |
|
After Width: | Height: | Size: 648 B |
|
After Width: | Height: | Size: 74 B |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 3.0 KiB |
|
|
@ -0,0 +1,108 @@
|
|||
.GenericModal .Title, .ConfirmationModal .Title{
|
||||
font-family:Arial, Helvetica, Sans-Serif;
|
||||
font-weight:bold;
|
||||
font-size:27px;
|
||||
color:#363636;
|
||||
margin: 5px;
|
||||
letter-spacing: -1px;
|
||||
}
|
||||
|
||||
.GenericModal {
|
||||
padding: 5px;
|
||||
*top: -150px;
|
||||
}
|
||||
|
||||
.GenericModalBody {
|
||||
background-color:#fff;
|
||||
padding:10px
|
||||
}
|
||||
|
||||
.GenericModal .Message, .ConfirmationModal .Message {
|
||||
display:inline-block;
|
||||
width:275px;
|
||||
vertical-align:middle;
|
||||
font:bold 15px Arial,Helvetica,Sans-Serif;
|
||||
letter-spacing: 0;
|
||||
font-size-adjust: none;
|
||||
font-stretch: normal;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.GenericModal div.ImageContainer {
|
||||
display:inline-block;
|
||||
height:110px;
|
||||
width:110px;
|
||||
overflow:hidden;
|
||||
vertical-align:middle;
|
||||
margin-left: -15px;
|
||||
*float: left;
|
||||
*margin-left: 0px;
|
||||
}
|
||||
|
||||
.GenericModal img.GenericModalImage {
|
||||
display:inline-block;
|
||||
max-height:110px;
|
||||
max-width:110px
|
||||
}
|
||||
|
||||
.GenericModal .GenericModalButtonContainer {
|
||||
text-align:center;
|
||||
margin: 5px auto;
|
||||
*margin-top: 115px;
|
||||
}
|
||||
|
||||
.largeModal .GenericModalBody {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.largeModal div.ImageContainer {
|
||||
position: absolute;
|
||||
left: 35px;
|
||||
top: 50%;
|
||||
margin-top: -55px;
|
||||
}
|
||||
|
||||
div.GenericModalErrorMessage {
|
||||
background-color: #FAE5E5;
|
||||
border: 1px solid #C00;
|
||||
font-size: 12px;
|
||||
font-weight: normal;
|
||||
text-align: left;
|
||||
padding: 5px;
|
||||
margin: 0 5px;
|
||||
}
|
||||
.ConfirmationModal .BlueYes {
|
||||
background: url("/images/Buttons/blue_yes.png") top;
|
||||
width: 100px;
|
||||
}
|
||||
.ConfirmationModal .BlueNo {
|
||||
background: url("/images/Buttons/blue_no.png") top;
|
||||
width: 106px;
|
||||
}
|
||||
.ConfirmationModal .GreyYes {
|
||||
background: url("/images/Buttons/grey_yes.png") top;
|
||||
width: 112px;
|
||||
}
|
||||
.ConfirmationModal .GreyNo {
|
||||
background: url("/images/Buttons/grey_no.png") top;
|
||||
width: 100px;
|
||||
}
|
||||
.ConfirmationModal .GreyNo, .ConfirmationModal .GreyYes, .ConfirmationModal .BlueYes, .ConfirmationModal .BlueNo {
|
||||
height: 50px;
|
||||
display: inline-block;
|
||||
}
|
||||
.GenericModal .GreyNo:hover, .GenericModal .GreyYes:hover, .GenericModal .BlueNo:hover, .GenericModal .BlueYes:hover {
|
||||
background-position: bottom;
|
||||
}
|
||||
.ConfirmationModalButtonContainer {
|
||||
text-align: center;
|
||||
}
|
||||
.ConfirmationModal .Message {
|
||||
min-height: 30px;
|
||||
width: 100%;
|
||||
margin: 10px auto;
|
||||
text-align: center;
|
||||
}
|
||||
div.ConfirmationModal div.GenericModalBody {
|
||||
padding: 5px;
|
||||
}
|
||||
|
|
@ -0,0 +1,158 @@
|
|||
.SquareTabGray
|
||||
{
|
||||
list-style: none;
|
||||
float: left;
|
||||
background-color: #D6D6D6;
|
||||
padding:7px;
|
||||
border: 1px solid #9e9e9e;
|
||||
font: bold 15px arial;
|
||||
color: #363636;
|
||||
margin: 4px 2px 0px 1px;
|
||||
border-bottom-width:0px;
|
||||
position:relative;
|
||||
top:2px;
|
||||
}
|
||||
.SquareTabGray a
|
||||
{
|
||||
text-decoration:none;
|
||||
color:#363636;
|
||||
cursor:pointer;
|
||||
}
|
||||
.SquareTabGray a:hover
|
||||
{
|
||||
text-decoration:none;
|
||||
background-color:#e9e9e9;
|
||||
}
|
||||
.SquareTabGray.selected a:hover,.SquareTabGray.ui-tabs-selected a:hover
|
||||
{
|
||||
text-decoration:none;
|
||||
background-color:#FCFCFC;
|
||||
}
|
||||
.SquareTabGray:hover
|
||||
{
|
||||
background-color:#e9e9e9;
|
||||
cursor:pointer;
|
||||
}
|
||||
.SquareTabGray.selected,.SquareTabGray.selected:hover,.SquareTabGray.ui-tabs-selected,.SquareTabGray.ui-tabs-selected:hover
|
||||
{
|
||||
background-color:#FCFCFC;
|
||||
margin-top:0px;
|
||||
padding:9px 7px 12px 7px;
|
||||
position:relative;
|
||||
top:1px;
|
||||
border-bottom:1px solid #ccc;
|
||||
border-bottom:1px solid #FCFCFC;
|
||||
}
|
||||
.TabContent {
|
||||
display: none;
|
||||
}
|
||||
.TabContent.selected {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.StandardPanelContainer
|
||||
{
|
||||
position: relative;
|
||||
clear: both;
|
||||
padding-left: 5px;
|
||||
}
|
||||
.StandardPanelContainer .StandardPanelWhite
|
||||
{
|
||||
position: relative;
|
||||
left: -5px;
|
||||
top: -1px;
|
||||
width: 100%;
|
||||
padding:6px;
|
||||
margin-bottom: -6px;
|
||||
}
|
||||
.WhiteSquareTabsContainer
|
||||
{
|
||||
background:url('/unsecurecontent/images/fakeborder.png') bottom repeat-x;
|
||||
width:100%;
|
||||
position: relative;
|
||||
padding: 0 0 0 5px;
|
||||
display:inline-block;
|
||||
margin: 0;
|
||||
}
|
||||
.SquareTabGray {
|
||||
list-style: none;
|
||||
float: left;
|
||||
background-color: #D6D6D6;
|
||||
padding: 7px;
|
||||
border: 1px solid #9E9E9E;
|
||||
font: bold 15px arial;
|
||||
color: #363636;
|
||||
margin: 4px 2px 0 1px;
|
||||
border-bottom-width: 0;
|
||||
position: relative;
|
||||
top: 2px;
|
||||
}
|
||||
|
||||
/*Modal Popup*/
|
||||
.modalBackground
|
||||
{
|
||||
background-color: Gray;
|
||||
filter: alpha(opacity=30);
|
||||
opacity: 0.3;
|
||||
}
|
||||
|
||||
.modalPopup
|
||||
{
|
||||
background-color: #ffffdd;
|
||||
border-width: 3px;
|
||||
border-style: solid;
|
||||
border-color: Gray;
|
||||
padding: 3px;
|
||||
}
|
||||
|
||||
.simplemodal-container {
|
||||
top: 200px !important;
|
||||
}
|
||||
.ImageButton
|
||||
{
|
||||
cursor: pointer;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
text-decoration: none;
|
||||
margin: 0;
|
||||
display:inline-block;
|
||||
}
|
||||
|
||||
|
||||
.btn-submit
|
||||
{
|
||||
height:50px;
|
||||
width:134px;
|
||||
border:0;
|
||||
padding:0;
|
||||
cursor:pointer;
|
||||
background: url(/unsecurecontent/images/btn-submit.png);
|
||||
}
|
||||
.btn-submit:hover
|
||||
{
|
||||
background-position:0 -50px;
|
||||
cursor:pointer;
|
||||
}
|
||||
.btn-cancel
|
||||
{
|
||||
width: 96px;
|
||||
height: 50px;
|
||||
background: url(/unsecurecontent/images/btn-cancel.png) no-repeat;
|
||||
}
|
||||
.btn-cancel:hover
|
||||
{
|
||||
background-position: 0px -50px;
|
||||
}
|
||||
|
||||
.StandardDividerTop {
|
||||
border-top: 1px solid #ccc;
|
||||
}
|
||||
.StandardDividerBottom {
|
||||
border-bottom: 1px solid #ccc;
|
||||
}
|
||||
.StandardDividerLeft {
|
||||
border-left: 1px solid #ccc;
|
||||
}
|
||||
.StandardDividerRight {
|
||||
border-right: 1px solid #ccc;
|
||||
}
|
||||
|
|
@ -0,0 +1,388 @@
|
|||
div.adminDash
|
||||
{
|
||||
color:#585858;
|
||||
}
|
||||
body
|
||||
{
|
||||
font-family:Arial,Helvetica,sans-serif;
|
||||
font-size:13px;
|
||||
background: #FCFCFC;
|
||||
margin: 0;
|
||||
}
|
||||
div.header
|
||||
{
|
||||
margin:0 0 10px;
|
||||
background: #F0F0F0;
|
||||
text-align: right;
|
||||
padding: 5px;
|
||||
border-top: 2px solid #3679BC;
|
||||
height: 18px;
|
||||
}
|
||||
a
|
||||
{
|
||||
color: #095fb5;
|
||||
text-decoration: none;
|
||||
}
|
||||
a:hover
|
||||
{
|
||||
text-decoration: underline;
|
||||
}
|
||||
div.ContentPaneFloat
|
||||
{
|
||||
float:left;
|
||||
padding-left: 230px;
|
||||
min-height:500px;
|
||||
}
|
||||
div.NavigationPaneFloat
|
||||
{
|
||||
position:absolute;
|
||||
width:200px;
|
||||
border-right: 1px solid #F0F0F0;
|
||||
}
|
||||
div.NavigationPaneFloat .navSection
|
||||
{
|
||||
padding-left:10px;
|
||||
}
|
||||
div.NavigationPaneFloat ul
|
||||
{
|
||||
margin:0px;
|
||||
margin-bottom:10px;
|
||||
}
|
||||
div.navHeader
|
||||
{
|
||||
border-bottom: 1px solid #DDD;
|
||||
margin-bottom: 10px;
|
||||
margin-top: 15px;
|
||||
padding-left: 10px;
|
||||
color: #4D4D4D;
|
||||
font-weight: bold;
|
||||
font-size: 15px;
|
||||
}
|
||||
h1
|
||||
{
|
||||
margin-top:35px;
|
||||
margin-bottom:12px;
|
||||
font-size: 40px;
|
||||
font-weight: bold;
|
||||
color:#363636;
|
||||
letter-spacing:-2px;
|
||||
}
|
||||
h2
|
||||
{
|
||||
font-size:16px;
|
||||
font-weight:bold;
|
||||
text-transform: uppercase;
|
||||
color:#000;
|
||||
}
|
||||
|
||||
|
||||
/* Legacy */
|
||||
.StandardTabWhite,
|
||||
.StandardTabGrayActive,
|
||||
.StandardTabGray
|
||||
{
|
||||
display:inline-block;
|
||||
height:26px;
|
||||
z-index: 2;
|
||||
position:relative;
|
||||
*display:inline;
|
||||
*zoom:1;
|
||||
}
|
||||
.StandardTabWhite span
|
||||
{
|
||||
*padding-right:14px;
|
||||
}
|
||||
.StandardTabGray
|
||||
{
|
||||
background-color: #b4cde9;
|
||||
margin-right: 4px;
|
||||
}
|
||||
li.ConfigTabs
|
||||
{
|
||||
padding: 6px 10px 0px 10px;
|
||||
}
|
||||
.StandardTabGrayActive
|
||||
{
|
||||
margin-right: 4px;
|
||||
}
|
||||
|
||||
.StandardTabGray a,
|
||||
.StandardTabGrayActive a
|
||||
{
|
||||
color: White;
|
||||
}
|
||||
.StandardTabGray a:hover,
|
||||
.StandardTabGrayActive a:hover
|
||||
{
|
||||
text-decoration:none;
|
||||
}
|
||||
|
||||
.StandardTabGray:hover,
|
||||
.StandardTabGrayActive
|
||||
{
|
||||
background-color: #6c98cb;
|
||||
color: White;
|
||||
}
|
||||
|
||||
div.Signin
|
||||
{
|
||||
margin: 0 auto;
|
||||
width: 198px;
|
||||
margin-top: 150px;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
div.Signin .formRow
|
||||
{
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
div.Signin .formRow label
|
||||
{
|
||||
display: block;
|
||||
}
|
||||
div.Signin .formRow input
|
||||
{
|
||||
border: 1px solid #999;
|
||||
padding: 3px;
|
||||
width: 190px;
|
||||
}
|
||||
|
||||
div.Signin .formRowSubmit
|
||||
{
|
||||
text-align: right;
|
||||
margin-top: 12px;
|
||||
}
|
||||
div.Signin .formRowSubmit input
|
||||
{
|
||||
border: 1px solid #999;
|
||||
padding: 3px 6px;
|
||||
border-radius: 3px;
|
||||
margin: 0;
|
||||
}
|
||||
div.Signin .formRowSubmit input:hover
|
||||
{
|
||||
cursor: pointer;
|
||||
background: white;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
div.header div.headerFloatLeft
|
||||
{
|
||||
float:left;
|
||||
}
|
||||
div.header div.headerFloatRight
|
||||
{
|
||||
float:right;
|
||||
}
|
||||
div#recaptcha_area
|
||||
{
|
||||
margin: 0 auto;
|
||||
margin-left: -40px;
|
||||
}
|
||||
|
||||
|
||||
/* mvc pages */
|
||||
|
||||
#GroupName {
|
||||
width: 400px;
|
||||
height: 20px;
|
||||
}
|
||||
|
||||
#NamePattern {
|
||||
width: 396px;
|
||||
}
|
||||
|
||||
#messageDiv {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* div containing lists of settings, maybe populated with ajax */
|
||||
.resultsContainer {
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.settingsTableCaption {
|
||||
padding: 3px;
|
||||
}
|
||||
|
||||
.settingsTable
|
||||
{
|
||||
border-collapse: collapse;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.settingsTable td {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.settingsTable td div
|
||||
{
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
/* actions column -> anchor */
|
||||
.settingsTable .a a
|
||||
{
|
||||
color: #095fb5;
|
||||
}
|
||||
|
||||
/* name column */
|
||||
.settingsTable .n
|
||||
{
|
||||
width: 250px;
|
||||
}
|
||||
|
||||
/* value column */
|
||||
.settingsTable .v
|
||||
{
|
||||
width: 300px;
|
||||
}
|
||||
|
||||
/* secret value */
|
||||
.settingsTable .v span
|
||||
{
|
||||
color: red;
|
||||
}
|
||||
|
||||
/* connection string */
|
||||
.settingsTable .cs
|
||||
{
|
||||
width: 400px;
|
||||
}
|
||||
|
||||
/* comment column */
|
||||
.settingsTable .c {
|
||||
width: 280px;
|
||||
}
|
||||
|
||||
/* group column in connection strings */
|
||||
.settingsTable .g {
|
||||
width: 300px;
|
||||
}
|
||||
|
||||
/* group column trimmed */
|
||||
.settingsTable .gt {
|
||||
width: 170px;
|
||||
}
|
||||
|
||||
/* type column */
|
||||
.settingsTable .t {
|
||||
width: 110px;
|
||||
}
|
||||
|
||||
.settingsTable td,
|
||||
.settingsTable th {
|
||||
border: 1px solid #999999;
|
||||
}
|
||||
|
||||
.settingsTable td {
|
||||
padding: 4px;
|
||||
}
|
||||
|
||||
.settingsTable th {
|
||||
padding: 5px 4px;
|
||||
color: black;
|
||||
}
|
||||
|
||||
.settingsTable tr:hover {
|
||||
background-color: #DDDDDD
|
||||
}
|
||||
|
||||
.configDialog {
|
||||
display: none;
|
||||
}
|
||||
.configDialog input[type=text] {
|
||||
width: 400px;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* Styles for validation helpers
|
||||
-----------------------------------------------------------*/
|
||||
.field-validation-error
|
||||
{
|
||||
color: #ff0000;
|
||||
}
|
||||
|
||||
.field-validation-valid
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
|
||||
.input-validation-error
|
||||
{
|
||||
border: 1px solid #ff0000 !important;
|
||||
background-color: #ffeeee;
|
||||
}
|
||||
|
||||
.validation-summary-errors
|
||||
{
|
||||
font-weight: bold;
|
||||
color: #ff0000;
|
||||
}
|
||||
|
||||
.validation-summary-valid
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** styles for services config pages begin ***/
|
||||
.authorization-column span,
|
||||
.authorization-column a {
|
||||
width: 50px;
|
||||
display: inline-block;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.authorization-column span.selected {
|
||||
font-weight: bold;
|
||||
background-color: #EDEDED;
|
||||
border-radius: 4px;
|
||||
}
|
||||
/** styles for services config pages end ***/
|
||||
|
||||
|
||||
|
||||
/*** client settings beging ***/
|
||||
#client-settings label {
|
||||
display: block;
|
||||
}
|
||||
#client-settings .add-top-margin {
|
||||
margin-top: 20px;
|
||||
}
|
||||
#client-settings #status-message {
|
||||
margin-left: 5px;
|
||||
}
|
||||
#client-settings input#setting-key {
|
||||
width: 602px;
|
||||
margin-bottom: 10px;
|
||||
display: block;
|
||||
}
|
||||
#client-settings textarea {
|
||||
width: 600px;
|
||||
height: 350px;
|
||||
margin-bottom: 10px;
|
||||
display: block;
|
||||
margin-top: 2px;
|
||||
}
|
||||
#client-settings table {
|
||||
border-spacing: 0;
|
||||
}
|
||||
#client-settings table td {
|
||||
padding: 0;
|
||||
vertical-align: top;
|
||||
}
|
||||
/*** client settings end ***/
|
||||
|
||||
|
||||
/*** regex start ***/
|
||||
a.edit-regex-link {
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
/*** regex ends ***/
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
$(function () {
|
||||
var minScale = $("#MarketingBoostPanel").data('mincale');
|
||||
var maxScale = $("#MarketingBoostPanel").data('maxscale');
|
||||
var currentValue = $("#BoostAmountScale").val();
|
||||
$("#slider").slider({
|
||||
value: currentValue,
|
||||
min: minScale,
|
||||
max: maxScale,
|
||||
step: 1,
|
||||
slide: function (event, ui) {
|
||||
$("#BoostAmountScale").val(ui.value);
|
||||
}
|
||||
});
|
||||
$("#BoostAmountScale").val($("#slider").slider("value"));
|
||||
$("#ReleaseDate").bind('blur keyup change', (function () {
|
||||
var startDate = $(this).val();
|
||||
$("#BoostStartDate").val(startDate);
|
||||
$("#BoostEndDate").val("");
|
||||
}));
|
||||
});
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
if (typeof GenericModal === "undefined") {
|
||||
GenericModal = function () {
|
||||
var modalProperties = {
|
||||
overlayClose: true,
|
||||
escClose: true,
|
||||
opacity: 80,
|
||||
overlayCss: {
|
||||
backgroundColor: "#000"
|
||||
}
|
||||
};
|
||||
var _CloseCallBack;
|
||||
$(function () {
|
||||
$('.GenericModal .btn-submit').click(function () {
|
||||
close();
|
||||
});
|
||||
});
|
||||
|
||||
function open(title, imageURL, message, closeCallBack, isLarge) {
|
||||
_CloseCallBack = closeCallBack;
|
||||
var modal = $('div.GenericModal').filter(':first');
|
||||
modal.find('div.Title').text(title);
|
||||
modal.find('img.GenericModalImage').attr('src', imageURL);
|
||||
modal.find('div.Message').html(message);
|
||||
if (isLarge) {
|
||||
modal.removeClass('smallModal');
|
||||
modal.addClass('largeModal');
|
||||
}
|
||||
modal.modal(modalProperties);
|
||||
}
|
||||
|
||||
function close() {
|
||||
$.modal.close();
|
||||
if (typeof _CloseCallBack === 'function') {
|
||||
_CloseCallBack();
|
||||
}
|
||||
}
|
||||
return {
|
||||
open: open
|
||||
};
|
||||
} ();
|
||||
}
|
||||
|
|
@ -0,0 +1,624 @@
|
|||
/*
|
||||
* SimpleModal 1.3.5 - jQuery Plugin
|
||||
* http://www.ericmmartin.com/projects/simplemodal/
|
||||
* Copyright (c) 2010 Eric Martin (http://twitter.com/EricMMartin)
|
||||
* Dual licensed under the MIT and GPL licenses
|
||||
* Revision: $Id: jquery.simplemodal.js 245 2010-03-25 20:41:15Z emartin24 $
|
||||
*/
|
||||
|
||||
/**
|
||||
* SimpleModal is a lightweight jQuery plugin that provides a simple
|
||||
* interface to create a modal dialog.
|
||||
*
|
||||
* The goal of SimpleModal is to provide developers with a cross-browser
|
||||
* overlay and container that will be populated with data provided to
|
||||
* SimpleModal.
|
||||
*
|
||||
* There are two ways to call SimpleModal:
|
||||
* 1) As a chained function on a jQuery object, like $('#myDiv').modal();.
|
||||
* This call would place the DOM object, #myDiv, inside a modal dialog.
|
||||
* Chaining requires a jQuery object. An optional options object can be
|
||||
* passed as a parameter.
|
||||
*
|
||||
* @example $('<div>my data</div>').modal({options});
|
||||
* @example $('#myDiv').modal({options});
|
||||
* @example jQueryObject.modal({options});
|
||||
*
|
||||
* 2) As a stand-alone function, like $.modal(data). The data parameter
|
||||
* is required and an optional options object can be passed as a second
|
||||
* parameter. This method provides more flexibility in the types of data
|
||||
* that are allowed. The data could be a DOM object, a jQuery object, HTML
|
||||
* or a string.
|
||||
*
|
||||
* @example $.modal('<div>my data</div>', {options});
|
||||
* @example $.modal('my data', {options});
|
||||
* @example $.modal($('#myDiv'), {options});
|
||||
* @example $.modal(jQueryObject, {options});
|
||||
* @example $.modal(document.getElementById('myDiv'), {options});
|
||||
*
|
||||
* A SimpleModal call can contain multiple elements, but only one modal
|
||||
* dialog can be created at a time. Which means that all of the matched
|
||||
* elements will be displayed within the modal container.
|
||||
*
|
||||
* SimpleModal internally sets the CSS needed to display the modal dialog
|
||||
* properly in all browsers, yet provides the developer with the flexibility
|
||||
* to easily control the look and feel. The styling for SimpleModal can be
|
||||
* done through external stylesheets, or through SimpleModal, using the
|
||||
* overlayCss and/or containerCss options.
|
||||
*
|
||||
* SimpleModal has been tested in the following browsers:
|
||||
* - IE 6, 7, 8
|
||||
* - Firefox 2, 3
|
||||
* - Opera 9, 10
|
||||
* - Safari 3, 4
|
||||
* - Chrome 1, 2, 3, 4
|
||||
*
|
||||
* @name SimpleModal
|
||||
* @type jQuery
|
||||
* @requires jQuery v1.2.2
|
||||
* @cat Plugins/Windows and Overlays
|
||||
* @author Eric Martin (http://ericmmartin.com)
|
||||
* @version 1.3.5
|
||||
*/
|
||||
;(function ($) {
|
||||
var ie6 = $.browser.msie && parseInt($.browser.version) == 6 && typeof window['XMLHttpRequest'] != "object",
|
||||
ieQuirks = false,
|
||||
w = [];
|
||||
|
||||
/*
|
||||
* Stand-alone function to create a modal dialog.
|
||||
*
|
||||
* @param {string, object} data A string, jQuery object or DOM object
|
||||
* @param {object} [options] An optional object containing options overrides
|
||||
*/
|
||||
$.modal = function (data, options) {
|
||||
return $.modal.impl.init(data, options);
|
||||
};
|
||||
|
||||
/*
|
||||
* Stand-alone close function to close the modal dialog
|
||||
*/
|
||||
$.modal.close = function () {
|
||||
$.modal.impl.close();
|
||||
};
|
||||
|
||||
/*
|
||||
* Chained function to create a modal dialog.
|
||||
*
|
||||
* @param {object} [options] An optional object containing options overrides
|
||||
*/
|
||||
$.fn.modal = function (options) {
|
||||
return $.modal.impl.init(this, options);
|
||||
};
|
||||
|
||||
/*
|
||||
* SimpleModal default options
|
||||
*
|
||||
* appendTo: (String:'body') The jQuery selector to append the elements to. For ASP.NET, use 'form'.
|
||||
* focus: (Boolean:true) Forces focus to remain on the modal dialog
|
||||
* opacity: (Number:50) The opacity value for the overlay div, from 0 - 100
|
||||
* overlayId: (String:'simplemodal-overlay') The DOM element id for the overlay div
|
||||
* overlayCss: (Object:{}) The CSS styling for the overlay div
|
||||
* containerId: (String:'simplemodal-container') The DOM element id for the container div
|
||||
* containerCss: (Object:{}) The CSS styling for the container div
|
||||
* dataId: (String:'simplemodal-data') The DOM element id for the data div
|
||||
* dataCss: (Object:{}) The CSS styling for the data div
|
||||
* minHeight: (Number:null) The minimum height for the container
|
||||
* minWidth: (Number:null) The minimum width for the container
|
||||
* maxHeight: (Number:null) The maximum height for the container. If not specified, the window height is used.
|
||||
* maxWidth: (Number:null) The maximum width for the container. If not specified, the window width is used.
|
||||
* autoResize: (Boolean:false) Resize container on window resize? Use with caution - this may have undesirable side-effects.
|
||||
* autoPosition: (Boolean:true) Automatically position container on creation and window resize?
|
||||
* zIndex: (Number: 1000) Starting z-index value
|
||||
* close: (Boolean:true) If true, closeHTML, escClose and overClose will be used if set.
|
||||
If false, none of them will be used.
|
||||
* closeHTML: (String:'<a class="modalCloseImg" title="Close"></a>') The HTML for the
|
||||
default close link. SimpleModal will automatically add the closeClass to this element.
|
||||
* closeClass: (String:'simplemodal-close') The CSS class used to bind to the close event
|
||||
* escClose: (Boolean:true) Allow Esc keypress to close the dialog?
|
||||
* overlayClose: (Boolean:false) Allow click on overlay to close the dialog?
|
||||
* position: (Array:null) Position of container [top, left]. Can be number of pixels or percentage
|
||||
* persist: (Boolean:false) Persist the data across modal calls? Only used for existing
|
||||
DOM elements. If true, the data will be maintained across modal calls, if false,
|
||||
the data will be reverted to its original state.
|
||||
* modal: (Boolean:true) If false, the overlay, iframe, and certain events will be disabled
|
||||
allowing the user to interace with the page below the dialog
|
||||
* onOpen: (Function:null) The callback function used in place of SimpleModal's open
|
||||
* onShow: (Function:null) The callback function used after the modal dialog has opened
|
||||
* onClose: (Function:null) The callback function used in place of SimpleModal's close
|
||||
*/
|
||||
$.modal.defaults = {
|
||||
appendTo: 'body',
|
||||
focus: true,
|
||||
opacity: 50,
|
||||
overlayId: 'simplemodal-overlay',
|
||||
overlayCss: {},
|
||||
containerId: 'simplemodal-container',
|
||||
containerCss: {},
|
||||
dataId: 'simplemodal-data',
|
||||
dataCss: {},
|
||||
minHeight: null,
|
||||
minWidth: null,
|
||||
maxHeight: null,
|
||||
maxWidth: null,
|
||||
autoResize: false,
|
||||
autoPosition: true,
|
||||
zIndex: 10000,
|
||||
close: true,
|
||||
closeHTML: '<a class="modalCloseImg" title="Close"></a>',
|
||||
closeClass: 'simplemodal-close',
|
||||
escClose: true,
|
||||
overlayClose: false,
|
||||
position: null,
|
||||
persist: false,
|
||||
modal: true,
|
||||
onOpen: null,
|
||||
onShow: null,
|
||||
onClose: null
|
||||
};
|
||||
|
||||
/*
|
||||
* Main modal object
|
||||
*/
|
||||
$.modal.impl = {
|
||||
/*
|
||||
* Modal dialog options
|
||||
*/
|
||||
o: null,
|
||||
/*
|
||||
* Contains the modal dialog elements and is the object passed
|
||||
* back to the callback (onOpen, onShow, onClose) functions
|
||||
*/
|
||||
d: {},
|
||||
/*
|
||||
* Initialize the modal dialog
|
||||
*/
|
||||
init: function (data, options) {
|
||||
var s = this;
|
||||
|
||||
// don't allow multiple calls
|
||||
if (s.d.data) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// $.boxModel is undefined if checked earlier
|
||||
//ieQuirks = $.browser.msie && !$.boxModel;
|
||||
|
||||
// merge defaults and user options
|
||||
s.o = $.extend({}, $.modal.defaults, options);
|
||||
|
||||
// keep track of z-index
|
||||
s.zIndex = s.o.zIndex;
|
||||
|
||||
// set the onClose callback flag
|
||||
s.occb = false;
|
||||
|
||||
// determine how to handle the data based on its type
|
||||
if (typeof data == 'object') {
|
||||
// convert DOM object to a jQuery object
|
||||
data = data instanceof jQuery ? data : $(data);
|
||||
s.d.placeholder = false;
|
||||
|
||||
// if the object came from the DOM, keep track of its parent
|
||||
if (data.parent().parent().size() > 0) {
|
||||
data.before($('<span></span>')
|
||||
.attr('id', 'simplemodal-placeholder')
|
||||
.css({display: 'none'}));
|
||||
|
||||
s.d.placeholder = true;
|
||||
s.display = data.css('display');
|
||||
|
||||
// persist changes? if not, make a clone of the element
|
||||
if (!s.o.persist) {
|
||||
s.d.orig = data.clone(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (typeof data == 'string' || typeof data == 'number') {
|
||||
// just insert the data as innerHTML
|
||||
data = $('<div></div>').html(data);
|
||||
}
|
||||
else {
|
||||
// unsupported data type!
|
||||
alert('SimpleModal Error: Unsupported data type: ' + typeof data);
|
||||
return s;
|
||||
}
|
||||
|
||||
// create the modal overlay, container and, if necessary, iframe
|
||||
s.create(data);
|
||||
data = null;
|
||||
|
||||
// display the modal dialog
|
||||
s.open();
|
||||
|
||||
// useful for adding events/manipulating data in the modal dialog
|
||||
if ($.isFunction(s.o.onShow)) {
|
||||
s.o.onShow.apply(s, [s.d]);
|
||||
}
|
||||
|
||||
// don't break the chain =)
|
||||
return s;
|
||||
},
|
||||
/*
|
||||
* Create and add the modal overlay and container to the page
|
||||
*/
|
||||
create: function (data) {
|
||||
var s = this;
|
||||
|
||||
// get the window properties
|
||||
w = s.getDimensions();
|
||||
|
||||
// add an iframe to prevent select options from bleeding through
|
||||
if (s.o.modal && ie6) {
|
||||
s.d.iframe = $('<iframe src="javascript:false;"></iframe>')
|
||||
.css($.extend(s.o.iframeCss, {
|
||||
display: 'none',
|
||||
opacity: 0,
|
||||
position: 'fixed',
|
||||
height: w[0],
|
||||
width: w[1],
|
||||
zIndex: s.o.zIndex,
|
||||
top: 0,
|
||||
left: 0
|
||||
}))
|
||||
.appendTo(s.o.appendTo);
|
||||
}
|
||||
|
||||
// create the overlay
|
||||
s.d.overlay = $('<div></div>')
|
||||
.attr('id', s.o.overlayId)
|
||||
.addClass('simplemodal-overlay')
|
||||
.css($.extend(s.o.overlayCss, {
|
||||
display: 'none',
|
||||
opacity: s.o.opacity / 100,
|
||||
height: s.o.modal ? w[0] : 0,
|
||||
width: s.o.modal ? w[1] : 0,
|
||||
position: 'fixed',
|
||||
left: 0,
|
||||
top: 0,
|
||||
zIndex: s.o.zIndex + 1
|
||||
}))
|
||||
.appendTo(s.o.appendTo);
|
||||
|
||||
// create the container
|
||||
s.d.container = $('<div></div>')
|
||||
.attr('id', s.o.containerId)
|
||||
.addClass('simplemodal-container')
|
||||
.css($.extend(s.o.containerCss, {
|
||||
display: 'none',
|
||||
position: 'fixed',
|
||||
zIndex: s.o.zIndex + 2
|
||||
}))
|
||||
.append(s.o.close && s.o.closeHTML
|
||||
? $(s.o.closeHTML).addClass(s.o.closeClass)
|
||||
: '')
|
||||
.appendTo(s.o.appendTo);
|
||||
|
||||
s.d.wrap = $('<div></div>')
|
||||
.attr('tabIndex', -1)
|
||||
.addClass('simplemodal-wrap')
|
||||
.css({height: '100%', outline: 0, width: '100%', overflow:'visible'})
|
||||
.appendTo(s.d.container);
|
||||
|
||||
// add styling and attributes to the data
|
||||
// append to body to get correct dimensions, then move to wrap
|
||||
s.d.data = data
|
||||
.attr('id', data.attr('id') || s.o.dataId)
|
||||
.addClass('simplemodal-data')
|
||||
.css($.extend(s.o.dataCss, {
|
||||
display: 'none'
|
||||
}))
|
||||
.appendTo('body');
|
||||
data = null;
|
||||
|
||||
s.setContainerDimensions();
|
||||
s.d.data.appendTo(s.d.wrap);
|
||||
|
||||
// fix issues with IE
|
||||
if (ie6) {
|
||||
s.fixIE();
|
||||
}
|
||||
},
|
||||
/*
|
||||
* Bind events
|
||||
*/
|
||||
bindEvents: function () {
|
||||
var s = this;
|
||||
|
||||
// bind the close event to any element with the closeClass class
|
||||
$('.' + s.o.closeClass).bind('click.simplemodal', function (e) {
|
||||
e.preventDefault();
|
||||
s.close();
|
||||
});
|
||||
|
||||
// bind the overlay click to the close function, if enabled
|
||||
if (s.o.modal && s.o.close && s.o.overlayClose) {
|
||||
s.d.overlay.bind('click.simplemodal', function (e) {
|
||||
e.preventDefault();
|
||||
s.close();
|
||||
});
|
||||
}
|
||||
|
||||
// bind keydown events
|
||||
$(document).bind('keydown.simplemodal', function (e) {
|
||||
if (s.o.modal && s.o.focus && e.keyCode == 9) { // TAB
|
||||
s.watchTab(e);
|
||||
}
|
||||
else if ((s.o.close && s.o.escClose) && e.keyCode == 27) { // ESC
|
||||
e.preventDefault();
|
||||
s.close();
|
||||
}
|
||||
});
|
||||
|
||||
// update window size
|
||||
$(window).bind('resize.simplemodal', function () {
|
||||
// redetermine the window width/height
|
||||
w = s.getDimensions();
|
||||
|
||||
// reposition the dialog
|
||||
s.setContainerDimensions(true);
|
||||
|
||||
if (ie6) {
|
||||
s.fixIE();
|
||||
}
|
||||
else if (s.o.modal) {
|
||||
// update the iframe & overlay
|
||||
s.d.iframe && s.d.iframe.css({height: w[0], width: w[1]});
|
||||
s.d.overlay.css({height: w[0], width: w[1]});
|
||||
}
|
||||
});
|
||||
},
|
||||
/*
|
||||
* Unbind events
|
||||
*/
|
||||
unbindEvents: function () {
|
||||
$('.' + this.o.closeClass).unbind('click.simplemodal');
|
||||
$(document).unbind('keydown.simplemodal');
|
||||
$(window).unbind('resize.simplemodal');
|
||||
this.d.overlay.unbind('click.simplemodal');
|
||||
},
|
||||
/*
|
||||
* Fix issues in IE6 and IE7 in quirks mode
|
||||
*/
|
||||
fixIE: function () {
|
||||
var s = this, p = s.o.position;
|
||||
|
||||
// simulate fixed position - adapted from BlockUI
|
||||
$.each([s.d.iframe || null, !s.o.modal ? null : s.d.overlay, s.d.container], function (i, el) {
|
||||
if (el) {
|
||||
var bch = 'document.body.clientHeight', bcw = 'document.body.clientWidth',
|
||||
bsh = 'document.body.scrollHeight', bsl = 'document.body.scrollLeft',
|
||||
bst = 'document.body.scrollTop', bsw = 'document.body.scrollWidth',
|
||||
ch = 'document.documentElement.clientHeight', cw = 'document.documentElement.clientWidth',
|
||||
sl = 'document.documentElement.scrollLeft', st = 'document.documentElement.scrollTop',
|
||||
s = el[0].style;
|
||||
|
||||
s.position = 'absolute';
|
||||
if (i < 2) {
|
||||
s.removeExpression('height');
|
||||
s.removeExpression('width');
|
||||
s.setExpression('height','' + bsh + ' > ' + bch + ' ? ' + bsh + ' : ' + bch + ' + "px"');
|
||||
s.setExpression('width','' + bsw + ' > ' + bcw + ' ? ' + bsw + ' : ' + bcw + ' + "px"');
|
||||
}
|
||||
else {
|
||||
var te, le;
|
||||
if (p && p.constructor == Array) {
|
||||
var top = p[0]
|
||||
? typeof p[0] == 'number' ? p[0].toString() : p[0].replace(/px/, '')
|
||||
: el.css('top').replace(/px/, '');
|
||||
te = top.indexOf('%') == -1
|
||||
? top + ' + (t = ' + st + ' ? ' + st + ' : ' + bst + ') + "px"'
|
||||
: parseInt(top.replace(/%/, '')) + ' * ((' + ch + ' || ' + bch + ') / 100) + (t = ' + st + ' ? ' + st + ' : ' + bst + ') + "px"';
|
||||
|
||||
if (p[1]) {
|
||||
var left = typeof p[1] == 'number' ? p[1].toString() : p[1].replace(/px/, '');
|
||||
le = left.indexOf('%') == -1
|
||||
? left + ' + (t = ' + sl + ' ? ' + sl + ' : ' + bsl + ') + "px"'
|
||||
: parseInt(left.replace(/%/, '')) + ' * ((' + cw + ' || ' + bcw + ') / 100) + (t = ' + sl + ' ? ' + sl + ' : ' + bsl + ') + "px"';
|
||||
}
|
||||
}
|
||||
else {
|
||||
te = '(' + ch + ' || ' + bch + ') / 2 - (this.offsetHeight / 2) + (t = ' + st + ' ? ' + st + ' : ' + bst + ') + "px"';
|
||||
le = '(' + cw + ' || ' + bcw + ') / 2 - (this.offsetWidth / 2) + (t = ' + sl + ' ? ' + sl + ' : ' + bsl + ') + "px"';
|
||||
}
|
||||
s.removeExpression('top');
|
||||
s.removeExpression('left');
|
||||
s.setExpression('top', te);
|
||||
s.setExpression('left', le);
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
focus: function (pos) {
|
||||
var s = this, p = pos || 'first';
|
||||
|
||||
// focus on dialog or the first visible/enabled input element
|
||||
var input = $(':input:enabled:visible:' + p, s.d.wrap);
|
||||
input.length > 0 ? input.focus() : s.d.wrap.focus();
|
||||
},
|
||||
getDimensions: function () {
|
||||
var el = $(window);
|
||||
|
||||
// fix a jQuery/Opera bug with determining the window height
|
||||
var h = $.browser.opera && $.browser.version > '9.5' && $.fn.jquery <= '1.2.6' ? document.documentElement['clientHeight'] :
|
||||
$.browser.opera && $.browser.version < '9.5' && $.fn.jquery > '1.2.6' ? window.innerHeight :
|
||||
el.height();
|
||||
|
||||
return [h, el.width()];
|
||||
},
|
||||
getVal: function (v) {
|
||||
return v == 'auto' ? 0
|
||||
: v.indexOf('%') > 0 ? v
|
||||
: parseInt(v.replace(/px/, ''));
|
||||
},
|
||||
setContainerDimensions: function (resize) {
|
||||
var s = this;
|
||||
|
||||
if (!resize || (resize && s.o.autoResize)) {
|
||||
// get the dimensions for the container and data
|
||||
var ch = $.browser.opera ? s.d.container.height() : s.getVal(s.d.container.css('height')),
|
||||
cw = $.browser.opera ? s.d.container.width() : s.getVal(s.d.container.css('width')),
|
||||
dh = s.d.data.outerHeight(true), dw = s.d.data.outerWidth(true);
|
||||
|
||||
var mh = s.o.maxHeight && s.o.maxHeight < w[0] ? s.o.maxHeight : w[0],
|
||||
mw = s.o.maxWidth && s.o.maxWidth < w[1] ? s.o.maxWidth : w[1];
|
||||
|
||||
// height
|
||||
if (!ch) {
|
||||
if (!dh) {ch = s.o.minHeight;}
|
||||
else {
|
||||
if (dh > mh) {ch = mh;}
|
||||
else if (dh < s.o.minHeight) {ch = s.o.minHeight;}
|
||||
else {ch = dh;}
|
||||
}
|
||||
}
|
||||
else {
|
||||
ch = ch > mh ? mh : ch;
|
||||
}
|
||||
|
||||
// width
|
||||
if (!cw) {
|
||||
if (!dw) {cw = s.o.minWidth;}
|
||||
else {
|
||||
if (dw > mw) {cw = mw;}
|
||||
else if (dw < s.o.minWidth) {cw = s.o.minWidth;}
|
||||
else {cw = dw;}
|
||||
}
|
||||
}
|
||||
else {
|
||||
cw = cw > mw ? mw : cw;
|
||||
}
|
||||
|
||||
s.d.container.css({height: ch, width: cw});
|
||||
/* Uncomment if you want the dialog to have scrollbars inside it.
|
||||
if (dh > ch || dw > cw) {
|
||||
s.d.wrap.css({overflow:'auto'});
|
||||
} */
|
||||
}
|
||||
|
||||
if (s.o.autoPosition) {
|
||||
s.setPosition();
|
||||
}
|
||||
},
|
||||
setPosition: function () {
|
||||
var s = this, top, left,
|
||||
hc = (w[0]/2) - (s.d.container.outerHeight(true)/2),
|
||||
vc = (w[1]/2) - (s.d.container.outerWidth(true)/2);
|
||||
|
||||
if (s.o.position && Object.prototype.toString.call(s.o.position) === "[object Array]") {
|
||||
top = s.o.position[0] || hc;
|
||||
left = s.o.position[1] || vc;
|
||||
} else {
|
||||
top = hc;
|
||||
left = vc;
|
||||
}
|
||||
s.d.container.css({left: left, top: top});
|
||||
},
|
||||
watchTab: function (e) {
|
||||
var s = this;
|
||||
|
||||
if ($(e.target).parents('.simplemodal-container').length > 0) {
|
||||
// save the list of inputs
|
||||
s.inputs = $(':input:enabled:visible:first, :input:enabled:visible:last', s.d.data[0]);
|
||||
|
||||
// if it's the first or last tabbable element, refocus
|
||||
if ((!e.shiftKey && e.target == s.inputs[s.inputs.length -1]) ||
|
||||
(e.shiftKey && e.target == s.inputs[0]) ||
|
||||
s.inputs.length == 0) {
|
||||
e.preventDefault();
|
||||
var pos = e.shiftKey ? 'last' : 'first';
|
||||
setTimeout(function () {s.focus(pos);}, 10);
|
||||
}
|
||||
}
|
||||
else {
|
||||
// might be necessary when custom onShow callback is used
|
||||
e.preventDefault();
|
||||
setTimeout(function () {s.focus();}, 10);
|
||||
}
|
||||
},
|
||||
/*
|
||||
* Open the modal dialog elements
|
||||
* - Note: If you use the onOpen callback, you must "show" the
|
||||
* overlay and container elements manually
|
||||
* (the iframe will be handled by SimpleModal)
|
||||
*/
|
||||
open: function () {
|
||||
var s = this;
|
||||
// display the iframe
|
||||
s.d.iframe && s.d.iframe.show();
|
||||
|
||||
if ($.isFunction(s.o.onOpen)) {
|
||||
// execute the onOpen callback
|
||||
s.o.onOpen.apply(s, [s.d]);
|
||||
}
|
||||
else {
|
||||
// display the remaining elements
|
||||
s.d.overlay.show();
|
||||
s.d.container.show();
|
||||
s.d.data.show();
|
||||
}
|
||||
|
||||
s.focus();
|
||||
|
||||
// bind default events
|
||||
s.bindEvents();
|
||||
},
|
||||
/*
|
||||
* Close the modal dialog
|
||||
* - Note: If you use an onClose callback, you must remove the
|
||||
* overlay, container and iframe elements manually
|
||||
*
|
||||
* @param {boolean} external Indicates whether the call to this
|
||||
* function was internal or external. If it was external, the
|
||||
* onClose callback will be ignored
|
||||
*/
|
||||
close: function () {
|
||||
var s = this;
|
||||
|
||||
// prevent close when dialog does not exist
|
||||
if (!s.d.data) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// remove the default events
|
||||
s.unbindEvents();
|
||||
|
||||
if ($.isFunction(s.o.onClose) && !s.occb) {
|
||||
// set the onClose callback flag
|
||||
s.occb = true;
|
||||
|
||||
// execute the onClose callback
|
||||
s.o.onClose.apply(s, [s.d]);
|
||||
}
|
||||
else {
|
||||
// if the data came from the DOM, put it back
|
||||
if (s.d.placeholder) {
|
||||
var ph = $('#simplemodal-placeholder');
|
||||
// save changes to the data?
|
||||
if (s.o.persist) {
|
||||
// insert the (possibly) modified data back into the DOM
|
||||
ph.replaceWith(s.d.data.removeClass('simplemodal-data').css('display', s.display));
|
||||
}
|
||||
else {
|
||||
// remove the current and insert the original,
|
||||
// unmodified data back into the DOM
|
||||
s.d.data.hide().remove();
|
||||
ph.replaceWith(s.d.orig);
|
||||
}
|
||||
}
|
||||
else {
|
||||
// otherwise, remove it
|
||||
s.d.data.hide().remove();
|
||||
}
|
||||
|
||||
// remove the remaining elements
|
||||
s.d.container.hide().remove();
|
||||
s.d.overlay.hide().remove();
|
||||
s.d.iframe && s.d.iframe.hide().remove();
|
||||
|
||||
// reset the dialog object
|
||||
s.d = {};
|
||||
}
|
||||
}
|
||||
};
|
||||
})(jQuery);
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
/**
|
||||
* jQuery Validation Plugin 1.9.0
|
||||
*
|
||||
* http://bassistance.de/jquery-plugins/jquery-plugin-validation/
|
||||
* http://docs.jquery.com/Plugins/Validation
|
||||
*
|
||||
* Copyright (c) 2006 - 2011 Jörn Zaefferer
|
||||
*
|
||||
* Dual licensed under the MIT and GPL licenses:
|
||||
* http://www.opensource.org/licenses/mit-license.php
|
||||
* http://www.gnu.org/licenses/gpl.html
|
||||
*/
|
||||
(function(c){c.extend(c.fn,{validate:function(a){if(this.length){var b=c.data(this[0],"validator");if(b)return b;this.attr("novalidate","novalidate");b=new c.validator(a,this[0]);c.data(this[0],"validator",b);if(b.settings.onsubmit){a=this.find("input, button");a.filter(".cancel").click(function(){b.cancelSubmit=true});b.settings.submitHandler&&a.filter(":submit").click(function(){b.submitButton=this});this.submit(function(d){function e(){if(b.settings.submitHandler){if(b.submitButton)var f=c("<input type='hidden'/>").attr("name",
|
||||
b.submitButton.name).val(b.submitButton.value).appendTo(b.currentForm);b.settings.submitHandler.call(b,b.currentForm);b.submitButton&&f.remove();return false}return true}b.settings.debug&&d.preventDefault();if(b.cancelSubmit){b.cancelSubmit=false;return e()}if(b.form()){if(b.pendingRequest){b.formSubmitted=true;return false}return e()}else{b.focusInvalid();return false}})}return b}else a&&a.debug&&window.console&&console.warn("nothing selected, can't validate, returning nothing")},valid:function(){if(c(this[0]).is("form"))return this.validate().form();
|
||||
else{var a=true,b=c(this[0].form).validate();this.each(function(){a&=b.element(this)});return a}},removeAttrs:function(a){var b={},d=this;c.each(a.split(/\s/),function(e,f){b[f]=d.attr(f);d.removeAttr(f)});return b},rules:function(a,b){var d=this[0];if(a){var e=c.data(d.form,"validator").settings,f=e.rules,g=c.validator.staticRules(d);switch(a){case "add":c.extend(g,c.validator.normalizeRule(b));f[d.name]=g;if(b.messages)e.messages[d.name]=c.extend(e.messages[d.name],b.messages);break;case "remove":if(!b){delete f[d.name];
|
||||
return g}var h={};c.each(b.split(/\s/),function(j,i){h[i]=g[i];delete g[i]});return h}}d=c.validator.normalizeRules(c.extend({},c.validator.metadataRules(d),c.validator.classRules(d),c.validator.attributeRules(d),c.validator.staticRules(d)),d);if(d.required){e=d.required;delete d.required;d=c.extend({required:e},d)}return d}});c.extend(c.expr[":"],{blank:function(a){return!c.trim(""+a.value)},filled:function(a){return!!c.trim(""+a.value)},unchecked:function(a){return!a.checked}});c.validator=function(a,
|
||||
b){this.settings=c.extend(true,{},c.validator.defaults,a);this.currentForm=b;this.init()};c.validator.format=function(a,b){if(arguments.length==1)return function(){var d=c.makeArray(arguments);d.unshift(a);return c.validator.format.apply(this,d)};if(arguments.length>2&&b.constructor!=Array)b=c.makeArray(arguments).slice(1);if(b.constructor!=Array)b=[b];c.each(b,function(d,e){a=a.replace(RegExp("\\{"+d+"\\}","g"),e)});return a};c.extend(c.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",
|
||||
validClass:"valid",errorElement:"label",focusInvalid:true,errorContainer:c([]),errorLabelContainer:c([]),onsubmit:true,ignore:":hidden",ignoreTitle:false,onfocusin:function(a){this.lastActive=a;if(this.settings.focusCleanup&&!this.blockFocusCleanup){this.settings.unhighlight&&this.settings.unhighlight.call(this,a,this.settings.errorClass,this.settings.validClass);this.addWrapper(this.errorsFor(a)).hide()}},onfocusout:function(a){if(!this.checkable(a)&&(a.name in this.submitted||!this.optional(a)))this.element(a)},
|
||||
onkeyup:function(a){if(a.name in this.submitted||a==this.lastElement)this.element(a)},onclick:function(a){if(a.name in this.submitted)this.element(a);else a.parentNode.name in this.submitted&&this.element(a.parentNode)},highlight:function(a,b,d){a.type==="radio"?this.findByName(a.name).addClass(b).removeClass(d):c(a).addClass(b).removeClass(d)},unhighlight:function(a,b,d){a.type==="radio"?this.findByName(a.name).removeClass(b).addClass(d):c(a).removeClass(b).addClass(d)}},setDefaults:function(a){c.extend(c.validator.defaults,
|
||||
a)},messages:{required:"This field is required.",remote:"Please fix this field.",email:"Please enter a valid email address.",url:"Please enter a valid URL.",date:"Please enter a valid date.",dateISO:"Please enter a valid date (ISO).",number:"Please enter a valid number.",digits:"Please enter only digits.",creditcard:"Please enter a valid credit card number.",equalTo:"Please enter the same value again.",accept:"Please enter a value with a valid extension.",maxlength:c.validator.format("Please enter no more than {0} characters."),
|
||||
minlength:c.validator.format("Please enter at least {0} characters."),rangelength:c.validator.format("Please enter a value between {0} and {1} characters long."),range:c.validator.format("Please enter a value between {0} and {1}."),max:c.validator.format("Please enter a value less than or equal to {0}."),min:c.validator.format("Please enter a value greater than or equal to {0}.")},autoCreateRanges:false,prototype:{init:function(){function a(e){var f=c.data(this[0].form,"validator"),g="on"+e.type.replace(/^validate/,
|
||||
"");f.settings[g]&&f.settings[g].call(f,this[0],e)}this.labelContainer=c(this.settings.errorLabelContainer);this.errorContext=this.labelContainer.length&&this.labelContainer||c(this.currentForm);this.containers=c(this.settings.errorContainer).add(this.settings.errorLabelContainer);this.submitted={};this.valueCache={};this.pendingRequest=0;this.pending={};this.invalid={};this.reset();var b=this.groups={};c.each(this.settings.groups,function(e,f){c.each(f.split(/\s/),function(g,h){b[h]=e})});var d=
|
||||
this.settings.rules;c.each(d,function(e,f){d[e]=c.validator.normalizeRule(f)});c(this.currentForm).validateDelegate("[type='text'], [type='password'], [type='file'], select, textarea, [type='number'], [type='search'] ,[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], [type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'] ","focusin focusout keyup",a).validateDelegate("[type='radio'], [type='checkbox'], select, option","click",
|
||||
a);this.settings.invalidHandler&&c(this.currentForm).bind("invalid-form.validate",this.settings.invalidHandler)},form:function(){this.checkForm();c.extend(this.submitted,this.errorMap);this.invalid=c.extend({},this.errorMap);this.valid()||c(this.currentForm).triggerHandler("invalid-form",[this]);this.showErrors();return this.valid()},checkForm:function(){this.prepareForm();for(var a=0,b=this.currentElements=this.elements();b[a];a++)this.check(b[a]);return this.valid()},element:function(a){this.lastElement=
|
||||
a=this.validationTargetFor(this.clean(a));this.prepareElement(a);this.currentElements=c(a);var b=this.check(a);if(b)delete this.invalid[a.name];else this.invalid[a.name]=true;if(!this.numberOfInvalids())this.toHide=this.toHide.add(this.containers);this.showErrors();return b},showErrors:function(a){if(a){c.extend(this.errorMap,a);this.errorList=[];for(var b in a)this.errorList.push({message:a[b],element:this.findByName(b)[0]});this.successList=c.grep(this.successList,function(d){return!(d.name in a)})}this.settings.showErrors?
|
||||
this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors()},resetForm:function(){c.fn.resetForm&&c(this.currentForm).resetForm();this.submitted={};this.lastElement=null;this.prepareForm();this.hideErrors();this.elements().removeClass(this.settings.errorClass)},numberOfInvalids:function(){return this.objectLength(this.invalid)},objectLength:function(a){var b=0,d;for(d in a)b++;return b},hideErrors:function(){this.addWrapper(this.toHide).hide()},valid:function(){return this.size()==
|
||||
0},size:function(){return this.errorList.length},focusInvalid:function(){if(this.settings.focusInvalid)try{c(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").focus().trigger("focusin")}catch(a){}},findLastActive:function(){var a=this.lastActive;return a&&c.grep(this.errorList,function(b){return b.element.name==a.name}).length==1&&a},elements:function(){var a=this,b={};return c(this.currentForm).find("input, select, textarea").not(":submit, :reset, :image, [disabled]").not(this.settings.ignore).filter(function(){!this.name&&
|
||||
a.settings.debug&&window.console&&console.error("%o has no name assigned",this);if(this.name in b||!a.objectLength(c(this).rules()))return false;return b[this.name]=true})},clean:function(a){return c(a)[0]},errors:function(){return c(this.settings.errorElement+"."+this.settings.errorClass,this.errorContext)},reset:function(){this.successList=[];this.errorList=[];this.errorMap={};this.toShow=c([]);this.toHide=c([]);this.currentElements=c([])},prepareForm:function(){this.reset();this.toHide=this.errors().add(this.containers)},
|
||||
prepareElement:function(a){this.reset();this.toHide=this.errorsFor(a)},check:function(a){a=this.validationTargetFor(this.clean(a));var b=c(a).rules(),d=false,e;for(e in b){var f={method:e,parameters:b[e]};try{var g=c.validator.methods[e].call(this,a.value.replace(/\r/g,""),a,f.parameters);if(g=="dependency-mismatch")d=true;else{d=false;if(g=="pending"){this.toHide=this.toHide.not(this.errorsFor(a));return}if(!g){this.formatAndAdd(a,f);return false}}}catch(h){this.settings.debug&&window.console&&console.log("exception occured when checking element "+
|
||||
a.id+", check the '"+f.method+"' method",h);throw h;}}if(!d){this.objectLength(b)&&this.successList.push(a);return true}},customMetaMessage:function(a,b){if(c.metadata){var d=this.settings.meta?c(a).metadata()[this.settings.meta]:c(a).metadata();return d&&d.messages&&d.messages[b]}},customMessage:function(a,b){var d=this.settings.messages[a];return d&&(d.constructor==String?d:d[b])},findDefined:function(){for(var a=0;a<arguments.length;a++)if(arguments[a]!==undefined)return arguments[a]},defaultMessage:function(a,
|
||||
b){return this.findDefined(this.customMessage(a.name,b),this.customMetaMessage(a,b),!this.settings.ignoreTitle&&a.title||undefined,c.validator.messages[b],"<strong>Warning: No message defined for "+a.name+"</strong>")},formatAndAdd:function(a,b){var d=this.defaultMessage(a,b.method),e=/\$?\{(\d+)\}/g;if(typeof d=="function")d=d.call(this,b.parameters,a);else if(e.test(d))d=jQuery.format(d.replace(e,"{$1}"),b.parameters);this.errorList.push({message:d,element:a});this.errorMap[a.name]=d;this.submitted[a.name]=
|
||||
d},addWrapper:function(a){if(this.settings.wrapper)a=a.add(a.parent(this.settings.wrapper));return a},defaultShowErrors:function(){for(var a=0;this.errorList[a];a++){var b=this.errorList[a];this.settings.highlight&&this.settings.highlight.call(this,b.element,this.settings.errorClass,this.settings.validClass);this.showLabel(b.element,b.message)}if(this.errorList.length)this.toShow=this.toShow.add(this.containers);if(this.settings.success)for(a=0;this.successList[a];a++)this.showLabel(this.successList[a]);
|
||||
if(this.settings.unhighlight){a=0;for(b=this.validElements();b[a];a++)this.settings.unhighlight.call(this,b[a],this.settings.errorClass,this.settings.validClass)}this.toHide=this.toHide.not(this.toShow);this.hideErrors();this.addWrapper(this.toShow).show()},validElements:function(){return this.currentElements.not(this.invalidElements())},invalidElements:function(){return c(this.errorList).map(function(){return this.element})},showLabel:function(a,b){var d=this.errorsFor(a);if(d.length){d.removeClass(this.settings.validClass).addClass(this.settings.errorClass);
|
||||
d.attr("generated")&&d.html(b)}else{d=c("<"+this.settings.errorElement+"/>").attr({"for":this.idOrName(a),generated:true}).addClass(this.settings.errorClass).html(b||"");if(this.settings.wrapper)d=d.hide().show().wrap("<"+this.settings.wrapper+"/>").parent();this.labelContainer.append(d).length||(this.settings.errorPlacement?this.settings.errorPlacement(d,c(a)):d.insertAfter(a))}if(!b&&this.settings.success){d.text("");typeof this.settings.success=="string"?d.addClass(this.settings.success):this.settings.success(d)}this.toShow=
|
||||
this.toShow.add(d)},errorsFor:function(a){var b=this.idOrName(a);return this.errors().filter(function(){return c(this).attr("for")==b})},idOrName:function(a){return this.groups[a.name]||(this.checkable(a)?a.name:a.id||a.name)},validationTargetFor:function(a){if(this.checkable(a))a=this.findByName(a.name).not(this.settings.ignore)[0];return a},checkable:function(a){return/radio|checkbox/i.test(a.type)},findByName:function(a){var b=this.currentForm;return c(document.getElementsByName(a)).map(function(d,
|
||||
e){return e.form==b&&e.name==a&&e||null})},getLength:function(a,b){switch(b.nodeName.toLowerCase()){case "select":return c("option:selected",b).length;case "input":if(this.checkable(b))return this.findByName(b.name).filter(":checked").length}return a.length},depend:function(a,b){return this.dependTypes[typeof a]?this.dependTypes[typeof a](a,b):true},dependTypes:{"boolean":function(a){return a},string:function(a,b){return!!c(a,b.form).length},"function":function(a,b){return a(b)}},optional:function(a){return!c.validator.methods.required.call(this,
|
||||
c.trim(a.value),a)&&"dependency-mismatch"},startRequest:function(a){if(!this.pending[a.name]){this.pendingRequest++;this.pending[a.name]=true}},stopRequest:function(a,b){this.pendingRequest--;if(this.pendingRequest<0)this.pendingRequest=0;delete this.pending[a.name];if(b&&this.pendingRequest==0&&this.formSubmitted&&this.form()){c(this.currentForm).submit();this.formSubmitted=false}else if(!b&&this.pendingRequest==0&&this.formSubmitted){c(this.currentForm).triggerHandler("invalid-form",[this]);this.formSubmitted=
|
||||
false}},previousValue:function(a){return c.data(a,"previousValue")||c.data(a,"previousValue",{old:null,valid:true,message:this.defaultMessage(a,"remote")})}},classRuleSettings:{required:{required:true},email:{email:true},url:{url:true},date:{date:true},dateISO:{dateISO:true},dateDE:{dateDE:true},number:{number:true},numberDE:{numberDE:true},digits:{digits:true},creditcard:{creditcard:true}},addClassRules:function(a,b){a.constructor==String?this.classRuleSettings[a]=b:c.extend(this.classRuleSettings,
|
||||
a)},classRules:function(a){var b={};(a=c(a).attr("class"))&&c.each(a.split(" "),function(){this in c.validator.classRuleSettings&&c.extend(b,c.validator.classRuleSettings[this])});return b},attributeRules:function(a){var b={};a=c(a);for(var d in c.validator.methods){var e;if(e=d==="required"&&typeof c.fn.prop==="function"?a.prop(d):a.attr(d))b[d]=e;else if(a[0].getAttribute("type")===d)b[d]=true}b.maxlength&&/-1|2147483647|524288/.test(b.maxlength)&&delete b.maxlength;return b},metadataRules:function(a){if(!c.metadata)return{};
|
||||
var b=c.data(a.form,"validator").settings.meta;return b?c(a).metadata()[b]:c(a).metadata()},staticRules:function(a){var b={},d=c.data(a.form,"validator");if(d.settings.rules)b=c.validator.normalizeRule(d.settings.rules[a.name])||{};return b},normalizeRules:function(a,b){c.each(a,function(d,e){if(e===false)delete a[d];else if(e.param||e.depends){var f=true;switch(typeof e.depends){case "string":f=!!c(e.depends,b.form).length;break;case "function":f=e.depends.call(b,b)}if(f)a[d]=e.param!==undefined?
|
||||
e.param:true;else delete a[d]}});c.each(a,function(d,e){a[d]=c.isFunction(e)?e(b):e});c.each(["minlength","maxlength","min","max"],function(){if(a[this])a[this]=Number(a[this])});c.each(["rangelength","range"],function(){if(a[this])a[this]=[Number(a[this][0]),Number(a[this][1])]});if(c.validator.autoCreateRanges){if(a.min&&a.max){a.range=[a.min,a.max];delete a.min;delete a.max}if(a.minlength&&a.maxlength){a.rangelength=[a.minlength,a.maxlength];delete a.minlength;delete a.maxlength}}a.messages&&delete a.messages;
|
||||
return a},normalizeRule:function(a){if(typeof a=="string"){var b={};c.each(a.split(/\s/),function(){b[this]=true});a=b}return a},addMethod:function(a,b,d){c.validator.methods[a]=b;c.validator.messages[a]=d!=undefined?d:c.validator.messages[a];b.length<3&&c.validator.addClassRules(a,c.validator.normalizeRule(a))},methods:{required:function(a,b,d){if(!this.depend(d,b))return"dependency-mismatch";switch(b.nodeName.toLowerCase()){case "select":return(a=c(b).val())&&a.length>0;case "input":if(this.checkable(b))return this.getLength(a,
|
||||
b)>0;default:return c.trim(a).length>0}},remote:function(a,b,d){if(this.optional(b))return"dependency-mismatch";var e=this.previousValue(b);this.settings.messages[b.name]||(this.settings.messages[b.name]={});e.originalMessage=this.settings.messages[b.name].remote;this.settings.messages[b.name].remote=e.message;d=typeof d=="string"&&{url:d}||d;if(this.pending[b.name])return"pending";if(e.old===a)return e.valid;e.old=a;var f=this;this.startRequest(b);var g={};g[b.name]=a;c.ajax(c.extend(true,{url:d,
|
||||
mode:"abort",port:"validate"+b.name,dataType:"json",data:g,success:function(h){f.settings.messages[b.name].remote=e.originalMessage;var j=h===true;if(j){var i=f.formSubmitted;f.prepareElement(b);f.formSubmitted=i;f.successList.push(b);f.showErrors()}else{i={};h=h||f.defaultMessage(b,"remote");i[b.name]=e.message=c.isFunction(h)?h(a):h;f.showErrors(i)}e.valid=j;f.stopRequest(b,j)}},d));return"pending"},minlength:function(a,b,d){return this.optional(b)||this.getLength(c.trim(a),b)>=d},maxlength:function(a,
|
||||
b,d){return this.optional(b)||this.getLength(c.trim(a),b)<=d},rangelength:function(a,b,d){a=this.getLength(c.trim(a),b);return this.optional(b)||a>=d[0]&&a<=d[1]},min:function(a,b,d){return this.optional(b)||a>=d},max:function(a,b,d){return this.optional(b)||a<=d},range:function(a,b,d){return this.optional(b)||a>=d[0]&&a<=d[1]},email:function(a,b){return this.optional(b)||/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i.test(a)},
|
||||
url:function(a,b){return this.optional(b)||/^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(a)},
|
||||
date:function(a,b){return this.optional(b)||!/Invalid|NaN/.test(new Date(a))},dateISO:function(a,b){return this.optional(b)||/^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(a)},number:function(a,b){return this.optional(b)||/^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(a)},digits:function(a,b){return this.optional(b)||/^\d+$/.test(a)},creditcard:function(a,b){if(this.optional(b))return"dependency-mismatch";if(/[^0-9 -]+/.test(a))return false;var d=0,e=0,f=false;a=a.replace(/\D/g,"");for(var g=a.length-1;g>=
|
||||
0;g--){e=a.charAt(g);e=parseInt(e,10);if(f)if((e*=2)>9)e-=9;d+=e;f=!f}return d%10==0},accept:function(a,b,d){d=typeof d=="string"?d.replace(/,/g,"|"):"png|jpe?g|gif";return this.optional(b)||a.match(RegExp(".("+d+")$","i"))},equalTo:function(a,b,d){d=c(d).unbind(".validate-equalTo").bind("blur.validate-equalTo",function(){c(b).valid()});return a==d.val()}}});c.format=c.validator.format})(jQuery);
|
||||
(function(c){var a={};if(c.ajaxPrefilter)c.ajaxPrefilter(function(d,e,f){e=d.port;if(d.mode=="abort"){a[e]&&a[e].abort();a[e]=f}});else{var b=c.ajax;c.ajax=function(d){var e=("port"in d?d:c.ajaxSettings).port;if(("mode"in d?d:c.ajaxSettings).mode=="abort"){a[e]&&a[e].abort();return a[e]=b.apply(this,arguments)}return b.apply(this,arguments)}}})(jQuery);
|
||||
(function(c){!jQuery.event.special.focusin&&!jQuery.event.special.focusout&&document.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(e){e=c.event.fix(e);e.type=b;return c.event.handle.call(this,e)}c.event.special[b]={setup:function(){this.addEventListener(a,d,true)},teardown:function(){this.removeEventListener(a,d,true)},handler:function(e){arguments[0]=c.event.fix(e);arguments[0].type=b;return c.event.handle.apply(this,arguments)}}});c.extend(c.fn,{validateDelegate:function(a,
|
||||
b,d){return this.bind(b,function(e){var f=c(e.target);if(f.is(a))return d.apply(f,arguments)})}})})(jQuery);
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
/*
|
||||
** Unobtrusive validation support library for jQuery and jQuery Validate
|
||||
** Copyright (C) Microsoft Corporation. All rights reserved.
|
||||
*/
|
||||
(function(a){var d=a.validator,b,f="unobtrusiveValidation";function c(a,b,c){a.rules[b]=c;if(a.message)a.messages[b]=a.message}function i(a){return a.replace(/^\s+|\s+$/g,"").split(/\s*,\s*/g)}function g(a){return a.substr(0,a.lastIndexOf(".")+1)}function e(a,b){if(a.indexOf("*.")===0)a=a.replace("*.",b);return a}function l(c,d){var b=a(this).find("[data-valmsg-for='"+d[0].name+"']"),e=a.parseJSON(b.attr("data-valmsg-replace"))!==false;b.removeClass("field-validation-valid").addClass("field-validation-error");c.data("unobtrusiveContainer",b);if(e){b.empty();c.removeClass("input-validation-error").appendTo(b)}else c.hide()}function k(e,d){var c=a(this).find("[data-valmsg-summary=true]"),b=c.find("ul");if(b&&b.length&&d.errorList.length){b.empty();c.addClass("validation-summary-errors").removeClass("validation-summary-valid");a.each(d.errorList,function(){a("<li />").html(this.message).appendTo(b)})}}function j(c){var b=c.data("unobtrusiveContainer"),d=a.parseJSON(b.attr("data-valmsg-replace"));if(b){b.addClass("field-validation-valid").removeClass("field-validation-error");c.removeData("unobtrusiveContainer");d&&b.empty()}}function h(d){var b=a(d),c=b.data(f);if(!c){c={options:{errorClass:"input-validation-error",errorElement:"span",errorPlacement:a.proxy(l,d),invalidHandler:a.proxy(k,d),messages:{},rules:{},success:a.proxy(j,d)},attachValidation:function(){b.validate(this.options)},validate:function(){b.validate();return b.valid()}};b.data(f,c)}return c}d.unobtrusive={adapters:[],parseElement:function(b,i){var d=a(b),f=d.parents("form")[0],c,e,g;if(!f)return;c=h(f);c.options.rules[b.name]=e={};c.options.messages[b.name]=g={};a.each(this.adapters,function(){var c="data-val-"+this.name,i=d.attr(c),h={};if(i!==undefined){c+="-";a.each(this.params,function(){h[this]=d.attr(c+this)});this.adapt({element:b,form:f,message:i,params:h,rules:e,messages:g})}});jQuery.extend(e,{__dummy__:true});!i&&c.attachValidation()},parse:function(b){a(b).find(":input[data-val=true]").each(function(){d.unobtrusive.parseElement(this,true)});a("form").each(function(){var a=h(this);a&&a.attachValidation()})}};b=d.unobtrusive.adapters;b.add=function(c,a,b){if(!b){b=a;a=[]}this.push({name:c,params:a,adapt:b});return this};b.addBool=function(a,b){return this.add(a,function(d){c(d,b||a,true)})};b.addMinMax=function(e,g,f,a,d,b){return this.add(e,[d||"min",b||"max"],function(b){var e=b.params.min,d=b.params.max;if(e&&d)c(b,a,[e,d]);else if(e)c(b,g,e);else d&&c(b,f,d)})};b.addSingleVal=function(a,b,d){return this.add(a,[b||"val"],function(e){c(e,d||a,e.params[b])})};d.addMethod("__dummy__",function(){return true});d.addMethod("regex",function(b,c,d){var a;if(this.optional(c))return true;a=(new RegExp(d)).exec(b);return a&&a.index===0&&a[0].length===b.length});b.addSingleVal("accept","exts").addSingleVal("regex","pattern");b.addBool("creditcard").addBool("date").addBool("digits").addBool("email").addBool("number").addBool("url");b.addMinMax("length","minlength","maxlength","rangelength").addMinMax("range","min","max","range");b.add("equalto",["other"],function(b){var h=g(b.element.name),i=b.params.other,d=e(i,h),f=a(b.form).find(":input[name="+d+"]")[0];c(b,"equalTo",f)});b.add("required",function(a){(a.element.tagName.toUpperCase()!=="INPUT"||a.element.type.toUpperCase()!=="CHECKBOX")&&c(a,"required",true)});b.add("remote",["url","type","additionalfields"],function(b){var d={url:b.params.url,type:b.params.type||"GET",data:{}},f=g(b.element.name);a.each(i(b.params.additionalfields||b.element.name),function(h,g){var c=e(g,f);d.data[c]=function(){return a(b.form).find(":input[name='"+c+"']").val()}});c(b,"remote",d)});a(function(){d.unobtrusive.parse(document)})})(jQuery);
|
||||
|
|
@ -0,0 +1,735 @@
|
|||
/*
|
||||
* jQuery UI CSS Framework 1.8.7
|
||||
*
|
||||
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://docs.jquery.com/UI/Theming/API
|
||||
*/
|
||||
|
||||
/* Layout helpers
|
||||
----------------------------------*/
|
||||
.ui-helper-hidden { display: none; }
|
||||
.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
|
||||
.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
|
||||
.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
|
||||
.ui-helper-clearfix { display: inline-block; }
|
||||
/* required comment for clearfix to work in Opera \*/
|
||||
* html .ui-helper-clearfix { height:1%; }
|
||||
.ui-helper-clearfix { display:block; }
|
||||
/* end clearfix */
|
||||
.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
|
||||
|
||||
|
||||
/* Interaction Cues
|
||||
----------------------------------*/
|
||||
.ui-state-disabled { cursor: default !important; }
|
||||
|
||||
|
||||
/* Icons
|
||||
----------------------------------*/
|
||||
|
||||
/* states and images */
|
||||
.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
|
||||
|
||||
|
||||
/* Misc visuals
|
||||
----------------------------------*/
|
||||
|
||||
/* Overlays */
|
||||
.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
|
||||
|
||||
|
||||
/*
|
||||
* jQuery UI CSS Framework 1.8.7
|
||||
*
|
||||
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://docs.jquery.com/UI/Theming/API
|
||||
*
|
||||
* To view and modify this theme, visit http://jqueryui.com/themeroller/?ctl=themeroller
|
||||
*/
|
||||
|
||||
|
||||
/* Component containers
|
||||
----------------------------------*/
|
||||
.ui-widget { font-family: Arial,sans-serif; font-size: 1.1em; }
|
||||
.ui-widget .ui-widget { font-size: 1em; }
|
||||
.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Arial,sans-serif; font-size: 1em; }
|
||||
.ui-widget-content { border: 1px solid #B6B6B6; background: #ffffff; color: #4F4F4F; }
|
||||
.ui-widget-content a { color: #4F4F4F; }
|
||||
.ui-widget-header { border: 1px solid #B6B6B6; color: #4F4F4F; font-weight: bold; }
|
||||
.ui-widget-header {
|
||||
background: #ededed url(images/bg_fallback.png) 0 0 repeat-x; /* Old browsers */
|
||||
background: -moz-linear-gradient(top, #ededed 0%, #c4c4c4 100%); /* FF3.6+ */
|
||||
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ededed), color-stop(100%,#c4c4c4)); /* Chrome,Safari4+ */
|
||||
background: -webkit-linear-gradient(top, #ededed 0%,#c4c4c4 100%); /* Chrome10+,Safari5.1+ */
|
||||
background: -o-linear-gradient(top, #ededed 0%,#c4c4c4 100%); /* Opera11.10+ */
|
||||
background: -ms-linear-gradient(top, #ededed 0%,#c4c4c4 100%); /* IE10+ */
|
||||
background: linear-gradient(top, #ededed 0%,#c4c4c4 100%); /* W3C */
|
||||
}
|
||||
.ui-widget-header a { color: #4F4F4F; }
|
||||
|
||||
/* Interaction states
|
||||
----------------------------------*/
|
||||
.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #B6B6B6; font-weight: normal; color: #4F4F4F; }
|
||||
.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default {
|
||||
background: #ededed url(images/bg_fallback.png) 0 0 repeat-x; /* Old browsers */
|
||||
background: -moz-linear-gradient(top, #ededed 0%, #c4c4c4 100%); /* FF3.6+ */
|
||||
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ededed), color-stop(100%,#c4c4c4)); /* Chrome,Safari4+ */
|
||||
background: -webkit-linear-gradient(top, #ededed 0%,#c4c4c4 100%); /* Chrome10+,Safari5.1+ */
|
||||
background: -o-linear-gradient(top, #ededed 0%,#c4c4c4 100%); /* Opera11.10+ */
|
||||
background: -ms-linear-gradient(top, #ededed 0%,#c4c4c4 100%); /* IE10+ */
|
||||
background: linear-gradient(top, #ededed 0%,#c4c4c4 100%); /* W3C */
|
||||
-webkit-box-shadow: 0 1px 0 rgba(255,255,255,0.6) inset;
|
||||
-moz-box-shadow: 0 1px 0 rgba(255,255,255,0.6) inset;
|
||||
box-shadow: 0 1px 0 rgba(255,255,255,0.6) inset;
|
||||
}
|
||||
.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #4F4F4F; text-decoration: none; }
|
||||
.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #9D9D9D; font-weight: normal; color: #313131; }
|
||||
.ui-state-hover a, .ui-state-hover a:hover { color: #313131; text-decoration: none; }
|
||||
.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active {
|
||||
outline: none;
|
||||
color: #1c4257; border: 1px solid #7096ab;
|
||||
background: #ededed url(images/bg_fallback.png) 0 -50px repeat-x; /* Old browsers */
|
||||
background: -moz-linear-gradient(top, #b9e0f5 0%, #92bdd6 100%); /* FF3.6+ */
|
||||
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#b9e0f5), color-stop(100%,#92bdd6)); /* Chrome,Safari4+ */
|
||||
background: -webkit-linear-gradient(top, #b9e0f5 0%,#92bdd6 100%); /* Chrome10+,Safari5.1+ */
|
||||
background: -o-linear-gradient(top, #b9e0f5 0%,#92bdd6 100%); /* Opera11.10+ */
|
||||
background: -ms-linear-gradient(top, #b9e0f5 0%,#92bdd6 100%); /* IE10+ */
|
||||
background: linear-gradient(top, #b9e0f5 0%,#92bdd6 100%); /* W3C */
|
||||
-webkit-box-shadow: none;
|
||||
-moz-box-shadow: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #313131; text-decoration: none; }
|
||||
.ui-widget :active { outline: none; }
|
||||
|
||||
/* Interaction Cues
|
||||
----------------------------------*/
|
||||
.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight { border: 1px solid #d2dbf4; background: #f4f8fd; color: #0d2054; -moz-border-radius: 0 !important; -webkit-border-radius: 0 !important; border-radius: 0 !important; }
|
||||
.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
|
||||
.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error { border: 1px solid #e2d0d0; background: #fcf0f0; color: #280b0b; -moz-border-radius: 0 !important; -webkit-border-radius: 0 !important; border-radius: 0 !important; }
|
||||
.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; }
|
||||
.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; }
|
||||
.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
|
||||
.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
|
||||
.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
|
||||
|
||||
/* Icons
|
||||
----------------------------------*/
|
||||
|
||||
/* states and images */
|
||||
.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
|
||||
.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
|
||||
.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
|
||||
.ui-state-default .ui-icon { background-image: url(images/ui-icons_454545_256x240.png); }
|
||||
.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
|
||||
.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
|
||||
.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
|
||||
.ui-state-error .ui-icon, .ui-state-error-text .ui-icon { background: url(images/icon_sprite.png) -16px 0 no-repeat !important; }
|
||||
.ui-state-highlight .ui-icon, .ui-state-error .ui-icon { margin-top: -1px; }
|
||||
|
||||
/* positioning */
|
||||
.ui-icon-carat-1-n { background-position: 0 0; }
|
||||
.ui-icon-carat-1-ne { background-position: -16px 0; }
|
||||
.ui-icon-carat-1-e { background-position: -32px 0; }
|
||||
.ui-icon-carat-1-se { background-position: -48px 0; }
|
||||
.ui-icon-carat-1-s { background-position: -64px 0; }
|
||||
.ui-icon-carat-1-sw { background-position: -80px 0; }
|
||||
.ui-icon-carat-1-w { background-position: -96px 0; }
|
||||
.ui-icon-carat-1-nw { background-position: -112px 0; }
|
||||
.ui-icon-carat-2-n-s { background-position: -128px 0; }
|
||||
.ui-icon-carat-2-e-w { background-position: -144px 0; }
|
||||
.ui-icon-triangle-1-n { background-position: 0 -16px; }
|
||||
.ui-icon-triangle-1-ne { background-position: -16px -16px; }
|
||||
.ui-icon-triangle-1-e { background-position: -32px -16px; }
|
||||
.ui-icon-triangle-1-se { background-position: -48px -16px; }
|
||||
.ui-icon-triangle-1-s { background-position: -64px -16px; }
|
||||
.ui-icon-triangle-1-sw { background-position: -80px -16px; }
|
||||
.ui-icon-triangle-1-w { background-position: -96px -16px; }
|
||||
.ui-icon-triangle-1-nw { background-position: -112px -16px; }
|
||||
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
|
||||
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
|
||||
.ui-icon-arrow-1-n { background-position: 0 -32px; }
|
||||
.ui-icon-arrow-1-ne { background-position: -16px -32px; }
|
||||
.ui-icon-arrow-1-e { background-position: -32px -32px; }
|
||||
.ui-icon-arrow-1-se { background-position: -48px -32px; }
|
||||
.ui-icon-arrow-1-s { background-position: -64px -32px; }
|
||||
.ui-icon-arrow-1-sw { background-position: -80px -32px; }
|
||||
.ui-icon-arrow-1-w { background-position: -96px -32px; }
|
||||
.ui-icon-arrow-1-nw { background-position: -112px -32px; }
|
||||
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
|
||||
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
|
||||
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
|
||||
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
|
||||
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
|
||||
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
|
||||
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
|
||||
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
|
||||
.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
|
||||
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
|
||||
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
|
||||
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
|
||||
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
|
||||
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
|
||||
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
|
||||
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
|
||||
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
|
||||
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
|
||||
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
|
||||
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
|
||||
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
|
||||
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
|
||||
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
|
||||
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
|
||||
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
|
||||
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
|
||||
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
|
||||
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
|
||||
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
|
||||
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
|
||||
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
|
||||
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
|
||||
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
|
||||
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
|
||||
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
|
||||
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
|
||||
.ui-icon-arrow-4 { background-position: 0 -80px; }
|
||||
.ui-icon-arrow-4-diag { background-position: -16px -80px; }
|
||||
.ui-icon-extlink { background-position: -32px -80px; }
|
||||
.ui-icon-newwin { background-position: -48px -80px; }
|
||||
.ui-icon-refresh { background-position: -64px -80px; }
|
||||
.ui-icon-shuffle { background-position: -80px -80px; }
|
||||
.ui-icon-transfer-e-w { background-position: -96px -80px; }
|
||||
.ui-icon-transferthick-e-w { background-position: -112px -80px; }
|
||||
.ui-icon-folder-collapsed { background-position: 0 -96px; }
|
||||
.ui-icon-folder-open { background-position: -16px -96px; }
|
||||
.ui-icon-document { background-position: -32px -96px; }
|
||||
.ui-icon-document-b { background-position: -48px -96px; }
|
||||
.ui-icon-note { background-position: -64px -96px; }
|
||||
.ui-icon-mail-closed { background-position: -80px -96px; }
|
||||
.ui-icon-mail-open { background-position: -96px -96px; }
|
||||
.ui-icon-suitcase { background-position: -112px -96px; }
|
||||
.ui-icon-comment { background-position: -128px -96px; }
|
||||
.ui-icon-person { background-position: -144px -96px; }
|
||||
.ui-icon-print { background-position: -160px -96px; }
|
||||
.ui-icon-trash { background-position: -176px -96px; }
|
||||
.ui-icon-locked { background-position: -192px -96px; }
|
||||
.ui-icon-unlocked { background-position: -208px -96px; }
|
||||
.ui-icon-bookmark { background-position: -224px -96px; }
|
||||
.ui-icon-tag { background-position: -240px -96px; }
|
||||
.ui-icon-home { background-position: 0 -112px; }
|
||||
.ui-icon-flag { background-position: -16px -112px; }
|
||||
.ui-icon-calendar { background-position: -32px -112px; }
|
||||
.ui-icon-cart { background-position: -48px -112px; }
|
||||
.ui-icon-pencil { background-position: -64px -112px; }
|
||||
.ui-icon-clock { background-position: -80px -112px; }
|
||||
.ui-icon-disk { background-position: -96px -112px; }
|
||||
.ui-icon-calculator { background-position: -112px -112px; }
|
||||
.ui-icon-zoomin { background-position: -128px -112px; }
|
||||
.ui-icon-zoomout { background-position: -144px -112px; }
|
||||
.ui-icon-search { background-position: -160px -112px; }
|
||||
.ui-icon-wrench { background-position: -176px -112px; }
|
||||
.ui-icon-gear { background-position: -192px -112px; }
|
||||
.ui-icon-heart { background-position: -208px -112px; }
|
||||
.ui-icon-star { background-position: -224px -112px; }
|
||||
.ui-icon-link { background-position: -240px -112px; }
|
||||
.ui-icon-cancel { background-position: 0 -128px; }
|
||||
.ui-icon-plus { background-position: -16px -128px; }
|
||||
.ui-icon-plusthick { background-position: -32px -128px; }
|
||||
.ui-icon-minus { background-position: -48px -128px; }
|
||||
.ui-icon-minusthick { background-position: -64px -128px; }
|
||||
.ui-icon-close { background-position: -80px -128px; }
|
||||
.ui-icon-closethick { background-position: -96px -128px; }
|
||||
.ui-icon-key { background-position: -112px -128px; }
|
||||
.ui-icon-lightbulb { background-position: -128px -128px; }
|
||||
.ui-icon-scissors { background-position: -144px -128px; }
|
||||
.ui-icon-clipboard { background-position: -160px -128px; }
|
||||
.ui-icon-copy { background-position: -176px -128px; }
|
||||
.ui-icon-contact { background-position: -192px -128px; }
|
||||
.ui-icon-image { background-position: -208px -128px; }
|
||||
.ui-icon-video { background-position: -224px -128px; }
|
||||
.ui-icon-script { background-position: -240px -128px; }
|
||||
.ui-icon-alert { background-position: 0 -144px; }
|
||||
.ui-icon-info { background: url(images/icon_sprite.png) 0 0 no-repeat !important; }
|
||||
.ui-icon-notice { background-position: -32px -144px; }
|
||||
.ui-icon-help { background-position: -48px -144px; }
|
||||
.ui-icon-check { background-position: -64px -144px; }
|
||||
.ui-icon-bullet { background-position: -80px -144px; }
|
||||
.ui-icon-radio-off { background-position: -96px -144px; }
|
||||
.ui-icon-radio-on { background-position: -112px -144px; }
|
||||
.ui-icon-pin-w { background-position: -128px -144px; }
|
||||
.ui-icon-pin-s { background-position: -144px -144px; }
|
||||
.ui-icon-play { background-position: 0 -160px; }
|
||||
.ui-icon-pause { background-position: -16px -160px; }
|
||||
.ui-icon-seek-next { background-position: -32px -160px; }
|
||||
.ui-icon-seek-prev { background-position: -48px -160px; }
|
||||
.ui-icon-seek-end { background-position: -64px -160px; }
|
||||
.ui-icon-seek-start { background-position: -80px -160px; }
|
||||
/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
|
||||
.ui-icon-seek-first { background-position: -80px -160px; }
|
||||
.ui-icon-stop { background-position: -96px -160px; }
|
||||
.ui-icon-eject { background-position: -112px -160px; }
|
||||
.ui-icon-volume-off { background-position: -128px -160px; }
|
||||
.ui-icon-volume-on { background-position: -144px -160px; }
|
||||
.ui-icon-power { background-position: 0 -176px; }
|
||||
.ui-icon-signal-diag { background-position: -16px -176px; }
|
||||
.ui-icon-signal { background-position: -32px -176px; }
|
||||
.ui-icon-battery-0 { background-position: -48px -176px; }
|
||||
.ui-icon-battery-1 { background-position: -64px -176px; }
|
||||
.ui-icon-battery-2 { background-position: -80px -176px; }
|
||||
.ui-icon-battery-3 { background-position: -96px -176px; }
|
||||
.ui-icon-circle-plus { background-position: 0 -192px; }
|
||||
.ui-icon-circle-minus { background-position: -16px -192px; }
|
||||
.ui-icon-circle-close { background-position: -32px -192px; }
|
||||
.ui-icon-circle-triangle-e { background-position: -48px -192px; }
|
||||
.ui-icon-circle-triangle-s { background-position: -64px -192px; }
|
||||
.ui-icon-circle-triangle-w { background-position: -80px -192px; }
|
||||
.ui-icon-circle-triangle-n { background-position: -96px -192px; }
|
||||
.ui-icon-circle-arrow-e { background-position: -112px -192px; }
|
||||
.ui-icon-circle-arrow-s { background-position: -128px -192px; }
|
||||
.ui-icon-circle-arrow-w { background-position: -144px -192px; }
|
||||
.ui-icon-circle-arrow-n { background-position: -160px -192px; }
|
||||
.ui-icon-circle-zoomin { background-position: -176px -192px; }
|
||||
.ui-icon-circle-zoomout { background-position: -192px -192px; }
|
||||
.ui-icon-circle-check { background-position: -208px -192px; }
|
||||
.ui-icon-circlesmall-plus { background-position: 0 -208px; }
|
||||
.ui-icon-circlesmall-minus { background-position: -16px -208px; }
|
||||
.ui-icon-circlesmall-close { background-position: -32px -208px; }
|
||||
.ui-icon-squaresmall-plus { background-position: -48px -208px; }
|
||||
.ui-icon-squaresmall-minus { background-position: -64px -208px; }
|
||||
.ui-icon-squaresmall-close { background-position: -80px -208px; }
|
||||
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
|
||||
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
|
||||
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
|
||||
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
|
||||
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
|
||||
.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
|
||||
|
||||
|
||||
/* Misc visuals
|
||||
----------------------------------*/
|
||||
|
||||
/* Corner radius */
|
||||
.ui-corner-tl { -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; }
|
||||
.ui-corner-tr { -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px; }
|
||||
.ui-corner-bl { -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; }
|
||||
.ui-corner-br { -moz-border-radius-bottomright: 3px; -webkit-border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; }
|
||||
.ui-corner-top { -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px; }
|
||||
.ui-corner-bottom { -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; -moz-border-radius-bottomright: 3px; -webkit-border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; }
|
||||
.ui-corner-right { -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px; -moz-border-radius-bottomright: 3px; -webkit-border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; }
|
||||
.ui-corner-left { -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; }
|
||||
.ui-corner-all { -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; }
|
||||
|
||||
/* Overlays */
|
||||
.ui-widget-overlay { background: #262b33; opacity: .70;filter:Alpha(Opacity=70); }
|
||||
.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #000000; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/*
|
||||
* jQuery UI Resizable 1.8.7
|
||||
*
|
||||
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://docs.jquery.com/UI/Resizable#theming
|
||||
*/
|
||||
.ui-resizable { position: relative;}
|
||||
.ui-resizable-handle { position: absolute; font-size: 0.1px; z-index: 999; display: block;}
|
||||
.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
|
||||
.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
|
||||
.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
|
||||
.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
|
||||
.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
|
||||
.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
|
||||
.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
|
||||
.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
|
||||
.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*
|
||||
* jQuery UI Selectable 1.8.7
|
||||
*
|
||||
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://docs.jquery.com/UI/Selectable#theming
|
||||
*/
|
||||
.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
|
||||
/*
|
||||
* jQuery UI Accordion 1.8.7
|
||||
*
|
||||
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://docs.jquery.com/UI/Accordion#theming
|
||||
*/
|
||||
/* IE/Win - Fix animation bug - #4615 */
|
||||
.ui-accordion { width: 100%; }
|
||||
.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
|
||||
.ui-accordion .ui-accordion-header, .ui-accordion .ui-accordion-content { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; }
|
||||
.ui-accordion .ui-accordion-li-fix { display: inline; }
|
||||
.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
|
||||
.ui-accordion .ui-accordion-header a { display: block; font-size: 12px; font-weight: bold; padding: .5em .5em .5em .7em; }
|
||||
.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
|
||||
.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
|
||||
.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
|
||||
.ui-accordion .ui-accordion-content-active { display: block; }/*
|
||||
* jQuery UI Autocomplete 1.8.7
|
||||
*
|
||||
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://docs.jquery.com/UI/Autocomplete#theming
|
||||
*/
|
||||
.ui-autocomplete {
|
||||
position: absolute; cursor: default; z-index: 3;
|
||||
-moz-border-radius: 0;
|
||||
-webkit-border-radius: 0;
|
||||
border-radius: 0;
|
||||
-moz-box-shadow: 0 1px 5px rgba(0,0,0,0.3);
|
||||
-webkit-box-shadow: 0 1px 5px rgba(0,0,0,0.3);
|
||||
box-shadow: 0 1px 5px rgba(0,0,0,0.3);
|
||||
}
|
||||
|
||||
/* workarounds */
|
||||
* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
|
||||
|
||||
/*
|
||||
* jQuery UI Menu 1.8.7
|
||||
*
|
||||
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://docs.jquery.com/UI/Menu#theming
|
||||
*/
|
||||
.ui-menu {
|
||||
list-style:none;
|
||||
padding: 2px;
|
||||
margin: 0;
|
||||
display:block;
|
||||
float: left;
|
||||
}
|
||||
.ui-menu .ui-menu {
|
||||
margin-top: -3px;
|
||||
}
|
||||
.ui-menu .ui-menu-item {
|
||||
margin:0;
|
||||
padding: 0;
|
||||
zoom: 1;
|
||||
float: left;
|
||||
clear: left;
|
||||
width: 100%;
|
||||
}
|
||||
.ui-menu .ui-menu-item a {
|
||||
text-decoration:none;
|
||||
display:block;
|
||||
padding:.2em .4em;
|
||||
line-height:1.5;
|
||||
zoom:1;
|
||||
}
|
||||
.ui-menu .ui-menu-item a.ui-state-hover,
|
||||
.ui-menu .ui-menu-item a.ui-state-active {
|
||||
font-weight: normal;
|
||||
margin: -1px;
|
||||
background: #5f83b9;
|
||||
color: #FFFFFF;
|
||||
text-shadow: 0px 1px 1px #234386;
|
||||
border-color: #466086;
|
||||
-moz-border-radius: 0;
|
||||
-webkit-border-radius: 0;
|
||||
border-radius: 0;
|
||||
}
|
||||
/*
|
||||
* jQuery UI Button 1.8.7
|
||||
*
|
||||
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://docs.jquery.com/UI/Button#theming
|
||||
*/
|
||||
.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; -webkit-user-select: none; -moz-user-select: none; user-select: none; } /* the overflow property removes extra width in IE */
|
||||
.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
|
||||
button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
|
||||
.ui-button-icons-only { width: 3.4em; }
|
||||
button.ui-button-icons-only { width: 3.7em; }
|
||||
|
||||
/* button animation properties */
|
||||
.ui-button {
|
||||
-webkit-transition: -webkit-box-shadow 0.25s ease-in-out;
|
||||
-moz-transition: -moz-box-shadow 0.25s ease-in-out;
|
||||
-o-transition: -o-box-shadow 0.25s ease-in-out;
|
||||
}
|
||||
|
||||
/*states*/
|
||||
.ui-button.ui-state-hover {
|
||||
-moz-box-shadow: 0 0 8px rgba(0, 0, 0, 0.15), 0 1px 0 rgba(255,255,255,0.8) inset;
|
||||
-webkit-box-shadow: 0 0 8px rgba(0, 0, 0, 0.15), 0 1px 0 rgba(255,255,255,0.8) inset;
|
||||
box-shadow: 0 0 8px rgba(0, 0, 0, 0.15), 0 1px 0 rgba(255,255,255,0.8) inset;
|
||||
}
|
||||
.ui-button.ui-state-focus {
|
||||
outline: none;
|
||||
color: #1c4257;
|
||||
border-color: #7096ab;
|
||||
background: #ededed url(images/bg_fallback.png) 0 -50px repeat-x; /* Old browsers */
|
||||
background: -moz-linear-gradient(top, #b9e0f5 0%, #92bdd6 100%); /* FF3.6+ */
|
||||
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#b9e0f5), color-stop(100%,#92bdd6)); /* Chrome,Safari4+ */
|
||||
background: -webkit-linear-gradient(top, #b9e0f5 0%,#92bdd6 100%); /* Chrome10+,Safari5.1+ */
|
||||
background: -o-linear-gradient(top, #b9e0f5 0%,#92bdd6 100%); /* Opera11.10+ */
|
||||
background: -ms-linear-gradient(top, #b9e0f5 0%,#92bdd6 100%); /* IE10+ */
|
||||
background: linear-gradient(top, #b9e0f5 0%,#92bdd6 100%); /* W3C */
|
||||
-moz-box-shadow: 0 0 8px rgba(0, 0, 0, 0.15), 0 1px 0 rgba(255,255,255,0.8) inset;
|
||||
-webkit-box-shadow: 0 0 8px rgba(0, 0, 0, 0.15), 0 1px 0 rgba(255,255,255,0.8) inset;
|
||||
box-shadow: 0 0 8px rgba(0, 0, 0, 0.15), 0 1px 0 rgba(255,255,255,0.8) inset;
|
||||
}
|
||||
|
||||
/*button text element */
|
||||
.ui-button .ui-button-text { display: block; line-height: 1.4; font-size: 14px; font-weight: bold; text-shadow: 0 1px 0 rgba(255, 255, 255, 0.6); }
|
||||
.ui-button-text-only .ui-button-text { padding: .4em 1em; }
|
||||
.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
|
||||
.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; }
|
||||
.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; }
|
||||
.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
|
||||
/* no icon support for input elements, provide padding by default */
|
||||
input.ui-button { font-size: 14px; font-weight: bold; text-shadow: 0 1px 0 rgba(255, 255, 255, 0.6); padding: 0 1em !important; height: 33px; }
|
||||
/*remove submit button internal padding in Firefox*/
|
||||
input.ui-button::-moz-focus-inner {
|
||||
border: 0;
|
||||
padding: 0;
|
||||
}
|
||||
/* fix webkits handling of the box model */
|
||||
@media screen and (-webkit-min-device-pixel-ratio:0) {
|
||||
input.ui-button {
|
||||
height: 31px !important;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*button icon element(s) */
|
||||
.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
|
||||
.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
|
||||
.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; }
|
||||
.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
|
||||
.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
|
||||
|
||||
/*button sets*/
|
||||
.ui-buttonset { margin-right: 7px; }
|
||||
.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
|
||||
.ui-buttonset .ui-button.ui-state-active { color: #1c4257; border-color: #7096ab; }
|
||||
.ui-buttonset .ui-button.ui-state-active {
|
||||
background: #ededed url(images/bg_fallback.png) 0 -50px repeat-x; /* Old browsers */
|
||||
background: -moz-linear-gradient(top, #b9e0f5 0%, #92bdd6 100%); /* FF3.6+ */
|
||||
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#b9e0f5), color-stop(100%,#92bdd6)); /* Chrome,Safari4+ */
|
||||
background: -webkit-linear-gradient(top, #b9e0f5 0%,#92bdd6 100%); /* Chrome10+,Safari5.1+ */
|
||||
background: -o-linear-gradient(top, #b9e0f5 0%,#92bdd6 100%); /* Opera11.10+ */
|
||||
background: -ms-linear-gradient(top, #b9e0f5 0%,#92bdd6 100%); /* IE10+ */
|
||||
background: linear-gradient(top, #b9e0f5 0%,#92bdd6 100%); /* W3C */
|
||||
-webkit-box-shadow: none;
|
||||
-moz-box-shadow: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
/* workarounds */
|
||||
button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
|
||||
/*
|
||||
* jQuery UI Dialog 1.8.7
|
||||
*
|
||||
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://docs.jquery.com/UI/Dialog#theming
|
||||
*/
|
||||
.ui-dialog { position: absolute; padding: 0; width: 300px; overflow: hidden; }
|
||||
.ui-dialog {
|
||||
-webkit-box-shadow: 0 2px 12px rgba(0,0,0,0.6);
|
||||
-moz-box-shadow: 0 2px 12px rgba(0,0,0,0.6);
|
||||
}
|
||||
.ui-dialog .ui-dialog-titlebar { padding: 0.7em 1em 0.6em 1em; position: relative; border: none; border-bottom: 1px solid #979797; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; }
|
||||
.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .2em 0; font-size: 14px; text-shadow: 0 1px 0 rgba(255,255,255,0.5); }
|
||||
.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .8em; top: 55%; width: 16px; margin: -10px 0 0 0; padding: 0; height: 16px; }
|
||||
.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; background: url(images/icon_sprite.png) 0 -16px no-repeat; }
|
||||
.ui-dialog .ui-dialog-titlebar-close:hover span { background-position: -16px -16px; }
|
||||
.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; border: 0; }
|
||||
.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
|
||||
.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
|
||||
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
|
||||
.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
|
||||
.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
|
||||
.ui-draggable .ui-dialog-titlebar { cursor: move; }
|
||||
/*
|
||||
* jQuery UI Slider 1.8.7
|
||||
*
|
||||
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://docs.jquery.com/UI/Slider#theming
|
||||
*/
|
||||
.ui-slider { position: relative; text-align: left; background: #d7d7d7; z-index: 1; }
|
||||
.ui-slider { -moz-box-shadow: 0 1px 2px rgba(0,0,0,0.5) inset; -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.5) inset; box-shadow: 0 1px 2px rgba(0,0,0,0.5) inset; }
|
||||
.ui-slider .ui-slider-handle { background: url(images/slider_handles.png) 0px -23px no-repeat; position: absolute; z-index: 2; width: 23px; height: 23px; cursor: default; border: none; outline: none; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; }
|
||||
.ui-slider .ui-state-hover, .ui-slider .ui-state-active { background-position: 0 0; }
|
||||
.ui-slider .ui-slider-range { background: #a3cae0; position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
|
||||
.ui-slider .ui-slider-range { -moz-box-shadow: 0 1px 2px rgba(17,35,45,0.6) inset; -webkit-box-shadow: 0 1px 2px rgba(17,35,45,0.6) inset; box-shadow: 0 1px 2px rgba(17,35,45,0.6) inset; }
|
||||
|
||||
|
||||
.ui-slider-horizontal { height: 5px; }
|
||||
.ui-slider-horizontal .ui-slider-handle { top: -8px; margin-left: -13px; }
|
||||
.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
|
||||
.ui-slider-horizontal .ui-slider-range-min { left: 0; }
|
||||
.ui-slider-horizontal .ui-slider-range-max { right: 0; }
|
||||
|
||||
.ui-slider-vertical { width: 5px; height: 100px; }
|
||||
.ui-slider-vertical .ui-slider-handle { left: -8px; margin-left: 0; margin-bottom: -13px; }
|
||||
.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
|
||||
.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
|
||||
.ui-slider-vertical .ui-slider-range-max { top: 0; }/*
|
||||
* jQuery UI Tabs 1.8.7
|
||||
*
|
||||
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://docs.jquery.com/UI/Tabs#theming
|
||||
*/
|
||||
.ui-tabs { position: relative; zoom: 1; border: 0; background: transparent; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
|
||||
.ui-tabs .ui-tabs-nav { margin: 0; padding: 0; background: transparent; border-width: 0 0 1px 0; }
|
||||
.ui-tabs .ui-tabs-nav {
|
||||
-moz-border-radius: 0;
|
||||
-webkit-border-radius: 0;
|
||||
border-radius: 0;
|
||||
}
|
||||
.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; }
|
||||
.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; font-size: 12px; font-weight: bold; text-shadow: 0 1px 0 rgba(255,255,255,0.5); }
|
||||
.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; background: #fff; border-color: #B6B6B6; }
|
||||
.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; outline: none; }
|
||||
.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
|
||||
.ui-tabs .ui-tabs-panel { display: block; border-width: 0 1px 1px 1px; padding: 1em 1.4em; background: none; }
|
||||
.ui-tabs .ui-tabs-panel { background: #FFF;
|
||||
-moz-border-radius: 0;
|
||||
-webkit-border-radius: 0;
|
||||
border-radius: 0;
|
||||
}
|
||||
.ui-tabs .ui-tabs-hide { display: none !important; }
|
||||
/*
|
||||
* jQuery UI Datepicker 1.8.7
|
||||
*
|
||||
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://docs.jquery.com/UI/Datepicker#theming
|
||||
*/
|
||||
.ui-datepicker { width: 17em; padding: 0; display: none; border-color: #DDDDDD; }
|
||||
.ui-datepicker {
|
||||
-moz-box-shadow: 0 4px 8px rgba(0,0,0,0.5);
|
||||
-webkit-box-shadow: 0 4px 8px rgba(0,0,0,0.5);
|
||||
box-shadow: 0 4px 8px rgba(0,0,0,0.5);
|
||||
}
|
||||
.ui-datepicker .ui-datepicker-header { position:relative; padding:.35em 0; border: none; border-bottom: 1px solid #B6B6B6; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; }
|
||||
.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 6px; width: 1.8em; height: 1.8em; }
|
||||
.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { border: 1px none; }
|
||||
.ui-datepicker .ui-datepicker-prev { left:2px; }
|
||||
.ui-datepicker .ui-datepicker-next { right:2px; }
|
||||
.ui-datepicker .ui-datepicker-prev span { background-position: 0px -32px !important; }
|
||||
.ui-datepicker .ui-datepicker-next span { background-position: -16px -32px !important; }
|
||||
.ui-datepicker .ui-datepicker-prev-hover span { background-position: 0px -48px !important; }
|
||||
.ui-datepicker .ui-datepicker-next-hover span { background-position: -16px -48px !important; }
|
||||
.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; background: url(images/icon_sprite.png) no-repeat; }
|
||||
.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; font-size: 12px; text-shadow: 0 1px 0 rgba(255,255,255,0.6); }
|
||||
.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
|
||||
.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
|
||||
.ui-datepicker select.ui-datepicker-month,
|
||||
.ui-datepicker select.ui-datepicker-year { width: 49%;}
|
||||
.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
|
||||
.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
|
||||
.ui-datepicker td { border: 0; padding: 1px; }
|
||||
.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
|
||||
.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
|
||||
.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
|
||||
.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
|
||||
.ui-datepicker table .ui-state-highlight { border-color: #5F83B9; }
|
||||
.ui-datepicker table .ui-state-hover { background: #5F83B9; color: #FFF; font-weight: bold; text-shadow: 0 1px 1px #234386; -webkit-box-shadow: 0 0px 0 rgba(255,255,255,0.6) inset; -moz-box-shadow: 0 0px 0 rgba(255,255,255,0.6) inset; box-shadow: 0 0px 0 rgba(255,255,255,0.6) inset; border-color: #5F83B9; }
|
||||
.ui-datepicker-calendar .ui-state-default { background: transparent; border-color: #FFF; }
|
||||
.ui-datepicker-calendar .ui-state-active { background: #5F83B9; border-color: #5F83B9; color: #FFF; font-weight: bold; text-shadow: 0 1px 1px #234386; }
|
||||
|
||||
/* with multiple calendars */
|
||||
.ui-datepicker.ui-datepicker-multi { width:auto; }
|
||||
.ui-datepicker-multi .ui-datepicker-group { float:left; }
|
||||
.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
|
||||
.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
|
||||
.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
|
||||
.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
|
||||
.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
|
||||
.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
|
||||
.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
|
||||
.ui-datepicker-row-break { clear:both; width:100%; }
|
||||
|
||||
/* RTL support */
|
||||
.ui-datepicker-rtl { direction: rtl; }
|
||||
.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
|
||||
.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
|
||||
.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
|
||||
.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
|
||||
.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
|
||||
.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
|
||||
.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
|
||||
.ui-datepicker-rtl .ui-datepicker-group { float:right; }
|
||||
.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
|
||||
.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
|
||||
|
||||
/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
|
||||
.ui-datepicker-cover {
|
||||
display: none; /*sorry for IE5*/
|
||||
display/**/: block; /*sorry for IE5*/
|
||||
position: absolute; /*must have*/
|
||||
z-index: -1; /*must have*/
|
||||
filter: mask(); /*must have*/
|
||||
top: -4px; /*must have*/
|
||||
left: -4px; /*must have*/
|
||||
width: 200px; /*must have*/
|
||||
height: 200px; /*must have*/
|
||||
}/*
|
||||
* jQuery UI Progressbar 1.8.7
|
||||
*
|
||||
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://docs.jquery.com/UI/Progressbar#theming
|
||||
*/
|
||||
.ui-progressbar { height: 12px; text-align: left; background: #FFF url(images/progress_bar.gif) 0 -14px repeat-x; }
|
||||
.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; background: url(images/progress_bar.gif) 0 0 repeat-x; }
|
||||
|
||||
/* Extra Input Field Styling */
|
||||
.ui-form textarea, .ui-form input:not([type="submit"]):not([type="button"]):not([type="checkbox"]):not([type="radio"]):not([type="file"]):not([type="range"]) {
|
||||
padding: 3px;
|
||||
-webkit-border-radius: 2px;
|
||||
-moz-border-radius: 2px;
|
||||
border-radius: 2px;
|
||||
border: 1px solid #cecece;
|
||||
outline: none;
|
||||
-webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.1) inset, 0 1px 0 rgba(255,255,255,0.2);
|
||||
-moz-box-shadow: 0 1px 3px rgba(0,0,0,0.1) inset, 0 1px 0 rgba(255,255,255,0.2);
|
||||
box-shadow: 0 1px 3px rgba(0,0,0,0.1) inset, 0 1px 0 rgba(255,255,255,0.2);
|
||||
-webkit-transition: all 0.25s ease-in-out;
|
||||
-moz-transition: all 0.25 ease-in-out;
|
||||
-o-transition: all 0.25s ease-in-out;
|
||||
}
|
||||
.ui-form textarea:hover, .ui-form input:not([type="submit"]):not([type="button"]):not([type="checkbox"]):not([type="radio"]):not([type="file"]):not([type="range"]):hover {
|
||||
border: 1px solid #bdbdbd;
|
||||
-webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.2) inset, 0 1px 0 rgba(255,255,255,0.2);
|
||||
-moz-box-shadow: 0 1px 3px rgba(0,0,0,0.2) inset, 0 1px 0 rgba(255,255,255,0.2);
|
||||
box-shadow: 0 1px 3px rgba(0,0,0,0.2) inset, 0 1px 0 rgba(255,255,255,0.2);
|
||||
}
|
||||
.ui-form textarea:focus, .ui-form input:not([type="submit"]):not([type="button"]):not([type="checkbox"]):not([type="radio"]):not([type="file"]):not([type="range"]):focus {
|
||||
border: 1px solid #95bdd4;
|
||||
-webkit-box-shadow: 0 2px 3px rgba(161,202,226,0.5) inset, 0 1px 0 rgba(255,255,255,0.2);
|
||||
-moz-box-shadow: 0 2px 3px rgba(161,202,226,0.5) inset, 0 1px 0 rgba(255,255,255,0.2);
|
||||
box-shadow: 0 2px 3px rgba(161,202,226,0.5) inset, 0 1px 0 rgba(255,255,255,0.2);
|
||||
}
|
||||
|
After Width: | Height: | Size: 3.6 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 502 B |
|
After Width: | Height: | Size: 4.3 KiB |
|
After Width: | Height: | Size: 4.3 KiB |
|
After Width: | Height: | Size: 4.3 KiB |
|
After Width: | Height: | Size: 211 B |
|
After Width: | Height: | Size: 209 B |
|
|
@ -0,0 +1,62 @@
|
|||
function autofilltop3() {
|
||||
$("#ctl00_cphRoblox_number1name").val($("#1").text());
|
||||
$("#ctl00_cphRoblox_number2name").val($("#2").text());
|
||||
$("#ctl00_cphRoblox_number3name").val($("#3").text());
|
||||
}
|
||||
|
||||
function previewNewAlert() {
|
||||
var hardcodedcolor = $("#ctl00_cphRoblox_alerttype").val();
|
||||
if (hardcodedcolor == "") {
|
||||
hardcodedcolor = "[#FF0000]";
|
||||
}
|
||||
var alertText = $("#ctl00_cphRoblox_txtText").val();
|
||||
if (alertText != "") {
|
||||
$("#previewNewAlert").show("slow");
|
||||
if ((alertText.toString().indexOf("[") != -1) && (alertText.toString().indexOf("]") != -1)) {
|
||||
var startColor = alertText.toString().indexOf("[") + 1;
|
||||
var colorLength = alertText.toString().indexOf("]") - startColor;
|
||||
var alertColor = alertText.toString().substr(startColor, colorLength);
|
||||
if (alertColor != "") {
|
||||
alertText = alertText.replace("[" + alertColor + "]", "");
|
||||
$("#previewAlertWrapper").css("background-color", alertColor);
|
||||
}
|
||||
}
|
||||
else {
|
||||
var alertColor = hardcodedcolor.replace("[", "").replace("]", "");
|
||||
$("#previewAlertWrapper").css("background-color", alertColor);
|
||||
}
|
||||
$("#previewAlertText").text(alertText);
|
||||
}
|
||||
else {
|
||||
$("#previewNewAlert").hide("slow");
|
||||
}
|
||||
}
|
||||
|
||||
function moderateScript(approve, scriptHash, divId) {
|
||||
$.ajax({
|
||||
type: "GET",
|
||||
async: true,
|
||||
cache: false,
|
||||
timeout: 50000,
|
||||
url: "/admi/UserScripts/ScriptApproval.ashx?approved=" + approve + "&hash=" + scriptHash,
|
||||
success: function(data) {
|
||||
if (data != null) {
|
||||
var text = "--Banned";
|
||||
if (approve == "true")
|
||||
text = "--Approved";
|
||||
$("#" + divId).text(text);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function displayScript(id) {
|
||||
$("#ScriptViewPanel").html("<img src='/images/waiting.gif' />");
|
||||
$.get("/admi/LoadScript.ashx?id=" + id, function(data) {
|
||||
if (data != null) {
|
||||
$("#ScriptViewPanel").html(data.toString());
|
||||
$("#ScriptViewPanel").visible = true;
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
|
@ -0,0 +1,103 @@
|
|||
var SetInactive = function (elem) {
|
||||
if (!Roblox.Admi.SettingsSemaphore.doesCurrentUserHoldSettingsSemaphore()) {
|
||||
return false;
|
||||
}
|
||||
if (!confirm("Deactivating the experiment will end all currently running versions. Are you sure?"))
|
||||
return false;
|
||||
|
||||
$(elem).parents('form').submit();
|
||||
};
|
||||
|
||||
var NewExperimentVersion = function (elem) {
|
||||
if (!Roblox.Admi.SettingsSemaphore.doesCurrentUserHoldSettingsSemaphore()) {
|
||||
return false;
|
||||
}
|
||||
var experimentId = $(elem).data('experiment-id');
|
||||
var url = $('.ab-test-configuration-page').data('new-version-url');
|
||||
|
||||
$('#update-enrollment-dialog').html('<div class="loading"></div>').dialog({
|
||||
title: "New Experiment Version",
|
||||
modal: true,
|
||||
resizable: false,
|
||||
draggable: false,
|
||||
width: 520,
|
||||
buttons: {
|
||||
"Cancel": function () {
|
||||
$(this).dialog("close");
|
||||
},
|
||||
"Submit": function () {
|
||||
if (!confirm("The experiment version will start as soon as it is created. Are you sure?"))
|
||||
return;
|
||||
|
||||
var form = $('#update-enrollment-dialog').find('form');
|
||||
|
||||
var sum = 0;
|
||||
$(form).find('input[name=variationPercentages]').each(function() {
|
||||
if (!isNaN(this.value) && this.value.length != 0) {
|
||||
sum += parseFloat(this.value);
|
||||
}
|
||||
});
|
||||
|
||||
if (sum != 100) {
|
||||
alert("Variations must add up to 100");
|
||||
return;
|
||||
}
|
||||
|
||||
form.submit();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: url + '?experimentId=' + experimentId,
|
||||
success: function (data) {
|
||||
$('#update-enrollment-dialog').html(data);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
var UpdateExperimentVersion = function (elem) {
|
||||
if (!Roblox.Admi.SettingsSemaphore.doesCurrentUserHoldSettingsSemaphore()) {
|
||||
return false;
|
||||
}
|
||||
var experimentId = $(elem).data('experiment-id');
|
||||
var version = $(elem).data('version');
|
||||
var url = $('.ab-test-configuration-page').data('edit-version-url');
|
||||
|
||||
$('#update-enrollment-dialog').html('<div class="loading"></div>').dialog({
|
||||
title: "Update Experiment Version",
|
||||
modal: true,
|
||||
resizable: false,
|
||||
draggable: false,
|
||||
width: 520,
|
||||
buttons: {
|
||||
"Cancel": function () {
|
||||
$(this).dialog("close");
|
||||
},
|
||||
"Submit": function () {
|
||||
if (!confirm("Are you sure?"))
|
||||
return;
|
||||
|
||||
$('#update-enrollment-dialog').find('form').submit();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: url + '?experimentId=' + experimentId + '&experimentVersion=' + version,
|
||||
success: function (data) {
|
||||
$('#update-enrollment-dialog').html(data);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
$(function () {
|
||||
$('.experiment .version:first-child').prepend('<a class="toggle-show-hide" style="cursor:pointer;">+</a>').show();
|
||||
|
||||
$('.ab-test-configuration-page').on('click', '.toggle-show-hide', function (event) {
|
||||
var parent = $(event.target).parents('.versions');
|
||||
parent.find('.version, .version-details').toggleClass('hide');
|
||||
});
|
||||
});
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
$(function () {
|
||||
if ($('.GenericForm').length > 0) {
|
||||
var IsLimitedRadioBtn = $("input[name = 'ProductOption.IsLimitedEdition'][value='True']");
|
||||
if (IsLimitedRadioBtn.attr("checked") != undefined) {
|
||||
$("input[name = 'ProductOption.IsLimitedEdition']").attr("disabled", "true");
|
||||
$("input[name = 'ProductOption.TotalAvailable']").attr("disabled", "true");
|
||||
$("input[name = 'Product.PriceInTickets']").attr("disabled", "true");
|
||||
}
|
||||
var makeCollectibleBtn = $('div[data-js-make-collectible-btn]');
|
||||
var makeCollectibleInput = $('input[data-js-make-collectible-input]');
|
||||
var itemIsCollectible = (makeCollectibleBtn.text() != "Make Collectible");
|
||||
makeCollectibleBtn.click(function () {
|
||||
if (!itemIsCollectible) {
|
||||
makeCollectibleInput.val("true");
|
||||
} else {
|
||||
makeCollectibleInput.val("false");
|
||||
}
|
||||
$('input[type="submit"]').removeAttr('disabled');
|
||||
$('input[type="submit"]').click();
|
||||
});
|
||||
if (itemIsCollectible) {
|
||||
$('.GenericForm input[type="submit"]').attr('disabled', 'disabled');
|
||||
}
|
||||
|
||||
var minScale = $("#MarketingBoostPanel").data('mincale');
|
||||
var maxScale = $("#MarketingBoostPanel").data('maxscale');
|
||||
var currentValue = $("#BoostAmountScale").val();
|
||||
$("#slider").slider({
|
||||
value: currentValue,
|
||||
min: minScale,
|
||||
max: maxScale,
|
||||
step: 1,
|
||||
slide: function (event, ui) {
|
||||
$("#BoostAmountScale").val(ui.value);
|
||||
}
|
||||
});
|
||||
$("#BoostAmountScale").val($("#slider").slider("value"));
|
||||
}
|
||||
$('form:eq(1)').submit(function () {
|
||||
$('input[name="Product.AffiliatePercentageFee"]').removeAttr('disabled');
|
||||
});
|
||||
});
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
function deletePixel(deleteAction, updateAction) {
|
||||
$('form').attr('action', deleteAction);
|
||||
var confirmed = confirm('Are you sure?');
|
||||
if (confirmed) {
|
||||
return true;
|
||||
} else {
|
||||
$('form').attr('action', updateAction);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
$(function () {
|
||||
|
||||
$('#AddCampaign').click(function () {
|
||||
var form = $('#CampaignForm');
|
||||
form.attr('action', '/partners/' + $('#PartnerID').val() + '/campaigns/create');
|
||||
var campaignName = $('#AddCampaignName').val();
|
||||
if (campaignName.trim().length > 0) {
|
||||
$('input[name=campaignName]').val(campaignName);
|
||||
form.submit();
|
||||
} else {
|
||||
$('#ErrorMessage').text("Campaign name cannot be empty.");
|
||||
}
|
||||
});
|
||||
});
|
||||
|
|
@ -0,0 +1 @@
|
|||
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
User-agent: *
|
||||
Disallow: /
|
||||
|
|
@ -0,0 +1,253 @@
|
|||
<?php
|
||||
header('Content-Type: text/plain');
|
||||
/*require $_SERVER["DOCUMENT_ROOT"] . '/Hexine/api/private/database.php';
|
||||
require $_SERVER["DOCUMENT_ROOT"] . '/Hexine/api/private/register.php';*/
|
||||
//coke is very epic
|
||||
ob_start();
|
||||
?>
|
||||
|
||||
--Game Monitoring Script Arguments--
|
||||
local jobid, placeid, userId, immediate = ...
|
||||
|
||||
function enableStats()
|
||||
game:SetJobsExtendedStatsWindow(30);
|
||||
end
|
||||
|
||||
function disableStats()
|
||||
game:SetJobsExtendedStatsWindow(0);
|
||||
end
|
||||
|
||||
function collectStats()
|
||||
|
||||
local measures = {}
|
||||
|
||||
local appendstring = function(name, value)
|
||||
local row = "string\t" .. name .. "\t" .. value;
|
||||
measures[#measures+1] = row;
|
||||
end
|
||||
|
||||
local appenddouble = function(name, value)
|
||||
local row = "double\t" .. name .. "\t" .. value;
|
||||
measures[#measures+1] = row;
|
||||
end
|
||||
|
||||
local extendedstats = game:GetJobsExtendedStats();
|
||||
-- some known column headers.
|
||||
local NAME = 1
|
||||
local columnnames = extendedstats[1];
|
||||
|
||||
-- setup index of running jobs.
|
||||
-- fist row is header. start at 2.
|
||||
local taskmap = {};
|
||||
for i = 2, #(extendedstats) do
|
||||
taskmap[extendedstats[i][NAME]] = i;
|
||||
end
|
||||
|
||||
local appendtask = function(taskname)
|
||||
if taskmap[taskname] then
|
||||
local taskdata = extendedstats[taskmap[taskname]];
|
||||
|
||||
for col = 2, #taskdata do
|
||||
appenddouble(taskname .. "." .. columnnames[col], taskdata[col])
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
appendtask("Physics")
|
||||
appendtask("Render")
|
||||
appendtask("Heartbeat")
|
||||
|
||||
local player = game:GetService("Players").LocalPlayer;
|
||||
if player then
|
||||
appenddouble("UserId", game:GetService("Players").LocalPlayer.userId);
|
||||
end
|
||||
|
||||
if jobid then
|
||||
appendstring("JobId", jobid)
|
||||
end
|
||||
|
||||
if placeid then
|
||||
appenddouble("PlaceId", placeid)
|
||||
end
|
||||
|
||||
appenddouble("DistributedGameTime", game.Workspace.DistributedGameTime);
|
||||
|
||||
if taskmap["Render"] then
|
||||
appenddouble("Render.interval.peakAbove40ms", game:GetJobIntervalPeakFraction("Render", 0.040));
|
||||
appenddouble("Render.time.peakAbove50ms", game:GetJobTimePeakFraction("Render", 0.050));
|
||||
end
|
||||
if taskmap["Physics"] then
|
||||
appenddouble("Physics.interval.peakAbove40ms", game:GetJobIntervalPeakFraction("Physics", 0.040));
|
||||
appenddouble("Physics.time.peakAbove50ms", game:GetJobTimePeakFraction("Physics", 0.050));
|
||||
end
|
||||
|
||||
if stats():FindFirstChild("Network") then
|
||||
for k, child in pairs(stats().Network:GetChildren()) do
|
||||
local rpackets = child:FindFirstChild("Received Physics Packets");
|
||||
if rpackets then
|
||||
appenddouble("Network." .. tostring(child) .. ".ReceivedPhysicsPackets", rpackets:GetValue())
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if stats():FindFirstChild("Workspace") then
|
||||
appenddouble("Workspace.FPS", stats().Workspace.FPS:GetValue())
|
||||
appenddouble("Workspace.World.Primitives", stats().Workspace.World.Primitives:GetValue())
|
||||
end
|
||||
|
||||
appenddouble("ElapsedTime", settings().Diagnostics.ElapsedTime);
|
||||
appenddouble("InstanceCount", settings().Diagnostics.InstanceCount);
|
||||
appenddouble("JobCount", settings().Diagnostics.JobCount);
|
||||
appenddouble("PrivateBytes", settings().Diagnostics.PrivateBytes);
|
||||
appenddouble("ProcessCores", settings().Diagnostics.ProcessCores);
|
||||
appendstring("RobloxVersion", settings().Diagnostics.RobloxVersion);
|
||||
|
||||
-- these can be gleaned from the machine config as well, but they are put here for convenience.
|
||||
appenddouble("RAM", settings().Diagnostics.RAM);
|
||||
appendstring("CPU", settings().Diagnostics.CPU);
|
||||
appenddouble("CpuCount", settings().Diagnostics.CpuCount);
|
||||
|
||||
-- TODO: remove pcall and OsPlatformId once OsPlatform is deployed everywhere
|
||||
pcall(function() appendstring("OsPlatform", settings().Diagnostics.OsPlatform) end)
|
||||
appenddouble("OsPlatformId", settings().Diagnostics.OsPlatformId)
|
||||
|
||||
appenddouble("PlayerCount", game.Players.NumPlayers);
|
||||
|
||||
return measures
|
||||
end
|
||||
|
||||
function postStats(t)
|
||||
local poststring = table.concat(t, "\n")
|
||||
local player = game:GetService("Players").LocalPlayer;
|
||||
local id = 0;
|
||||
local idtype = "None";
|
||||
if player then
|
||||
idtype = "PlayerId"
|
||||
id = game:GetService("Players").LocalPlayer.userId;
|
||||
end
|
||||
if placeid then
|
||||
idtype = "PlaceId"
|
||||
id = placeid
|
||||
end
|
||||
|
||||
local url = game:GetService("ContentProvider").BaseUrl .. "/Analytics/Measurement.ashx?Type=Game.Performance&IPFilter=primary&SecondaryFilterName=" .. idtype .. "&SecondaryFilterValue=" .. tostring(id);
|
||||
game:HttpPost(url, poststring, false)
|
||||
end
|
||||
|
||||
|
||||
enableStats();
|
||||
|
||||
-- lua doesn't have built in xor!
|
||||
-- use this multiplication-based munger instead.
|
||||
function munge_words(a, b)
|
||||
return ((a * b) / 0x100) % 0x10000;
|
||||
end
|
||||
|
||||
function collectAndPostStatsMaybe()
|
||||
local shouldPostProb = 1.0/64.0;
|
||||
local shouldPost = (math.random() < shouldPostProb)
|
||||
|
||||
if jobid then
|
||||
-- generate a "random" number from the guid.
|
||||
local s = {string.match(jobid, "(%x%x%x%x)(%x%x%x%x)-(%x%x%x%x)-(%x%x%x%x)-(%x%x%x%x)-(%x%x%x%x)(%x%x%x%x)(%x%x%x%x)")};
|
||||
local w = 0x0100; -- this is the identity value for munge_words
|
||||
for i = 1, #s do
|
||||
w = munge_words(w, tonumber(s[i], 16))
|
||||
end
|
||||
shouldPost = w < 0x10000 * shouldPostProb;
|
||||
end
|
||||
|
||||
if shouldPost then
|
||||
postStats(collectStats())
|
||||
end
|
||||
end
|
||||
|
||||
if immediate then
|
||||
postStats(collectStats())
|
||||
else
|
||||
delay(1 * 60, function()
|
||||
while true do
|
||||
collectAndPostStatsMaybe()
|
||||
wait(10 * 60)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
|
||||
function postFrmStats(t, id)
|
||||
local poststring = table.concat(t, "\n")
|
||||
local idtype = "PlayerId"
|
||||
|
||||
local url = game:GetService("ContentProvider").BaseUrl .. "/Analytics/Measurement.ashx?Type=Game.Performance.FrameRateManager&IPFilter=primary&SecondaryFilterName=" .. idtype .. "&SecondaryFilterValue=" .. tostring(id);
|
||||
game:HttpPost(url, poststring, false)
|
||||
end
|
||||
|
||||
-- Some sampling condition based on userId
|
||||
if userId then
|
||||
if (userId % 100) == 0 then
|
||||
local frm = stats():FindFirstChild("FrameRateManager")
|
||||
local closeConnection = game.Close:connect(function()
|
||||
pcall(function()
|
||||
local measures = {}
|
||||
|
||||
local appenddouble = function(name, value)
|
||||
local row = "double\t" .. name .. "\t" .. value;
|
||||
measures[#measures+1] = row;
|
||||
end
|
||||
|
||||
if frm then
|
||||
frm:GetValue()
|
||||
for k, child in pairs(frm:GetChildren()) do
|
||||
appenddouble(child.Name, child:GetValue())
|
||||
end
|
||||
end
|
||||
postFrmStats(measures, userId)
|
||||
postStats(collectStats())
|
||||
end)
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
<?php
|
||||
//this is a snippet of code from the coke14 webserver itself
|
||||
$data = "\n" . ob_get_clean();
|
||||
/*$data = ("url" . " = " . '"http://sitetest1.roblonium.com"');
|
||||
function setvar($var, $value)
|
||||
{
|
||||
global $data;
|
||||
$data = ($data . " \n" . $var . " = " . $value);
|
||||
}
|
||||
function setphp($var, $customname)
|
||||
{
|
||||
if ($customname == null or $customname == "") {
|
||||
$customname = $var;
|
||||
}
|
||||
if ($_GET[$customname] !== null) {
|
||||
setvar($var, $_GET[$customname]);
|
||||
}
|
||||
}
|
||||
function setglobalvar($var, $value)
|
||||
{
|
||||
global $data;
|
||||
$data = ($data . " \n_G." . $var . " = " . $value);
|
||||
}
|
||||
function setglobalphp($var, $customname)
|
||||
{
|
||||
if ($customname == null or $customname == "") {
|
||||
$customname = $var;
|
||||
}
|
||||
if ($_GET[$customname] !== null) {
|
||||
setglobalvar($var, $_GET[$customname]);
|
||||
}
|
||||
}
|
||||
|
||||
// replace all variables with the proper value
|
||||
setphp("jobid", "");
|
||||
setphp("placeid", "");
|
||||
setphp("userId", "");
|
||||
setvar("immediate", 0);
|
||||
$data = str_replace("-- 1273 Rockefeller Street --", $data, $obdata);*/
|
||||
$key = file_get_contents("file:///C:/signing/privatekey.pem");
|
||||
openssl_sign($data, $sig, $key, OPENSSL_ALGO_SHA1);
|
||||
echo "--rbxsig%" . base64_encode($sig) . "%" . $data;
|
||||
?>
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
<?php
|
||||
require $_SERVER["DOCUMENT_ROOT"] . '/Hexine/api/private/database.php';
|
||||
require $_SERVER["DOCUMENT_ROOT"] . '/Hexine/api/RCC/thumbnailers.php';
|
||||
|
||||
if (isset($_GET['Type']) && RCCService::verifyAccessKey($_SERVER['HTTP_ACCESSKEY'])) {
|
||||
$requestType = $_GET['Type'];
|
||||
if ($requestType == 'Game.Server.Status') {
|
||||
$status = $post = file_get_contents('php://input');
|
||||
if ($status == 0) {
|
||||
$database->deleteRow("jobs", ["serviceId" => $_SERVER['HTTP_ACCESSKEY']]);
|
||||
}else {
|
||||
$database->updateRow("jobs", [
|
||||
"status" => $status
|
||||
], ["serviceId" => $_SERVER['HTTP_ACCESSKEY']]);
|
||||
}
|
||||
}else {
|
||||
die(http_response_code(500));
|
||||
}
|
||||
}else {
|
||||
die(http_response_code(409));
|
||||
}
|
||||
/*$post = file_get_contents('php://input');
|
||||
$data = file_get_contents($_SERVER["DOCUMENT_ROOT"]."../Analytics/Logs/Cdn.log") . "\n" . $post;
|
||||
file_put_contents($_SERVER["DOCUMENT_ROOT"]."../Analytics/Logs/Cdn.log", $data);*/
|
||||
?>
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
<?php
|
||||
require $_SERVER["DOCUMENT_ROOT"] . '/Hexine/api/core_functions.php';
|
||||
header('Content-Type: text/plain');
|
||||
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
|
||||
header("Cache-Control: post-check=0, pre-check=0", false);
|
||||
header("Pragma: no-cache");
|
||||
$xmlheader = '<?xml version="1.0" encoding="utf-8" ?>
|
||||
';
|
||||
$user = getUserInfoFromUid((int)$_GET['userId']);
|
||||
if (!$user) {
|
||||
$user = getUserInfoFromUid(2);
|
||||
if ($user and $user->CharacterAppearance !== "" and $user->CharacterAppearance !== null) {
|
||||
$bodyColors = json_decode($user->CharacterAppearance, false)->bodyColors;
|
||||
}else {
|
||||
die("Error: Failed to fetch Guest character appearance");
|
||||
}
|
||||
}
|
||||
if ($user->CharacterAppearance !== "" and $user->CharacterAppearance !== null) {
|
||||
$bodyColors = json_decode($user->CharacterAppearance, false)->bodyColors;
|
||||
} else{
|
||||
$user = getUserInfoFromUid(53);
|
||||
if ($user and $user->CharacterAppearance !== "" and $user->CharacterAppearance !== null) {
|
||||
$bodyColors = json_decode($user->CharacterAppearance, false)->bodyColors;
|
||||
}else {
|
||||
die("Error: Failed to fetch Default character appearance");
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?=$xmlheader?>
|
||||
<roblox xmlns:xmime="http://www.w3.org/2005/05/xmlmime" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.roblox.com/roblox.xsd" version="4">
|
||||
<External>null</External>
|
||||
<External>nil</External>
|
||||
<Item class="BodyColors">
|
||||
<Properties>
|
||||
<int name="HeadColor"><?=$bodyColors->HeadColor?></int>
|
||||
<int name="LeftArmColor"><?=$bodyColors->LeftArmColor?></int>
|
||||
<int name="LeftLegColor"><?=$bodyColors->LeftLegColor?></int>
|
||||
<string name="Name">Body Colors</string>
|
||||
<int name="RightArmColor"><?=$bodyColors->RightArmColor?></int>
|
||||
<int name="RightLegColor"><?=$bodyColors->RightLegColor?></int>
|
||||
<int name="TorsoColor"><?=$bodyColors->TorsoColor?></int>
|
||||
<bool name="archivable">true</bool>
|
||||
</Properties>
|
||||
</Item>
|
||||
</roblox>
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
<?php
|
||||
require $_SERVER["DOCUMENT_ROOT"] . '/Hexine/api/private/database.php';
|
||||
header('Content-Type: text/plain');
|
||||
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
|
||||
header("Cache-Control: post-check=0, pre-check=0", false);
|
||||
header("Pragma: no-cache");
|
||||
$xmlheader = '<?xml version="1.0" encoding="utf-8" ?>
|
||||
';
|
||||
if (file_exists($_SERVER["DOCUMENT_ROOT"] . '/user/getbodycolors/' . $_GET['userId'])) {
|
||||
die(file_get_contents($_SERVER["DOCUMENT_ROOT"] . '/user/getbodycolors/' . $_GET['userId']));
|
||||
} else {
|
||||
function load($id){
|
||||
global $database;
|
||||
global $find;
|
||||
$find = $database->findRow("public_users", ["Id" => $id], ["Id", "CharacterAppearance"]);
|
||||
if ($find && $find->rowCount() > 0){
|
||||
$find = $find->fetch(PDO::FETCH_OBJ);
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (load($_GET['userId']) == true and $find->CharacterAppearance !== "" and $find->CharacterAppearance !== null) {
|
||||
$bodyColors = json_decode($find->CharacterAppearance, false)->bodyColors;
|
||||
} else{
|
||||
load(0);
|
||||
$bodyColors = json_decode($find->CharacterAppearance, false)->bodyColors;
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?=$xmlheader?>
|
||||
<roblox xmlns:xmime="http://www.w3.org/2005/05/xmlmime" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.roblox.com/roblox.xsd" version="4">
|
||||
<External>null</External>
|
||||
<External>nil</External>
|
||||
<Item class="BodyColors">
|
||||
<Properties>
|
||||
<int name="HeadColor"><?=$bodyColors->HeadColor?></int>
|
||||
<int name="LeftArmColor"><?=$bodyColors->LeftArmColor?></int>
|
||||
<int name="LeftLegColor"><?=$bodyColors->LeftLegColor?></int>
|
||||
<string name="Name">Body Colors</string>
|
||||
<int name="RightArmColor"><?=$bodyColors->RightArmColor?></int>
|
||||
<int name="RightLegColor"><?=$bodyColors->RightLegColor?></int>
|
||||
<int name="TorsoColor"><?=$bodyColors->TorsoColor?></int>
|
||||
<bool name="archivable">true</bool>
|
||||
</Properties>
|
||||
</Item>
|
||||
</roblox>
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
<?php
|
||||
/*if (file_exists($_SERVER["DOCUMENT_ROOT"] . '/user/getcharapp/' . $_GET['userId'])) {
|
||||
echo(file_get_contents($_SERVER["DOCUMENT_ROOT"] . '/user/getcharapp/' . $_GET['userId']));
|
||||
}else {
|
||||
echo(file_get_contents($_SERVER["DOCUMENT_ROOT"] . '/user/getcharapp/default'));
|
||||
}*/
|
||||
header('Content-Type: text/plain');
|
||||
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
|
||||
header("Cache-Control: post-check=0, pre-check=0", false);
|
||||
header("Pragma: no-cache");
|
||||
|
||||
// this is for players in the studio who're doing play solo. they shouldn't look like guests
|
||||
if ((int)$_GET['userId'] <= 0 && (int)$_GET['exception'] !== 1) {
|
||||
die();
|
||||
}
|
||||
|
||||
if (file_exists($_SERVER["DOCUMENT_ROOT"] . '/user/getcharapp/' . $_GET['userId'])) {
|
||||
die(file_get_contents($_SERVER["DOCUMENT_ROOT"] . '/user/getcharapp/' . $_GET['userId']));
|
||||
}
|
||||
$charapp = file_get_contents("http://" . $_SERVER['SERVER_NAME'] . "/v1.1/avatar-fetch?userId=".$_GET['userId']);
|
||||
|
||||
if (substr($charapp,0,6) == "Error:") {
|
||||
$charapp = file_get_contents("http://" . $_SERVER['SERVER_NAME'] . "/v1.1/avatar-fetch?userId=53"); //if an error occurs, return the default character appearance
|
||||
}
|
||||
|
||||
$charapp = json_decode($charapp, true);
|
||||
$charappFinal = $charapp['bodyColorsUrl'].';';
|
||||
foreach ($charapp['accessoryIds'] as $assetId){
|
||||
$charappFinal = $charappFinal."http://" . $_SERVER['SERVER_NAME'] . "/Asset?id=".$assetId.';';
|
||||
}
|
||||
/* no gears allowed >:(
|
||||
foreach ($charapp['backpackGearIds'] as $assetId){
|
||||
if (in_array($assetId, $charapp['equippedGearIds'])) {
|
||||
$charappFinal = $charappFinal."http://" . $_SERVER['SERVER_NAME'] . "/Asset?id=".$assetId.'&equipped=1;';
|
||||
}else {
|
||||
$charappFinal = $charappFinal."http://" . $_SERVER['SERVER_NAME'] . "/Asset?id=".$assetId.';';
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
echo($charappFinal);
|
||||
?>
|
||||
|
|
@ -0,0 +1 @@
|
|||
0 0 0 00 0 1 0
|
||||