mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-14 02:42:40 +01:00
b1b1ff83f2
Summary: Ref T603. I want to let applications define new capabilities (like "can manage global rules" in Herald) and get full support for them, including reasonable error strings in the UI. Currently, this is difficult for a couple of reasons. Partly this is just a code organization issue, which is easy to fix. The bigger thing is that we have a bunch of strings which depend on both the policy and capability, like: "You must be an administrator to view this object." "Administrator" is the policy, and "view" is the capability. That means every new capability has to add a string for each policy, and every new policy (should we introduce any) needs to add a string for each capability. And we can't do any piecemeal "You must be a {$role} to {$action} this object" becuase it's impossible to translate. Instead, make all the strings depend on //only// the policy, //only// the capability, or //only// the object type. This makes the dialogs read a little more strangely, but I think it's still pretty easy to understand, and it makes adding new stuff way way easier. Also provide more context, and more useful exception messages. Test Plan: - See screenshots. - Also triggered a policy exception and verified it was dramatically more useful than it used to be. Reviewers: btrahan, chad Reviewed By: btrahan CC: chad, aran Maniphest Tasks: T603 Differential Revision: https://secure.phabricator.com/D7260
126 lines
2 KiB
CSS
126 lines
2 KiB
CSS
/**
|
|
* @provides aphront-dialog-view-css
|
|
*/
|
|
|
|
.aphront-dialog-view {
|
|
width: 540px;
|
|
margin: 32px auto 16px;
|
|
border: 1px solid {$lightblueborder};
|
|
border-bottom: 1px solid {$blueborder};
|
|
box-shadow: 0 1px 5px rgba(0, 0, 0, 0.25),
|
|
inset 0 1px 0 rgba(255, 255, 255, 0.5);
|
|
}
|
|
|
|
.device-phone .aphront-dialog-view {
|
|
margin: 16px;
|
|
width: auto;
|
|
}
|
|
|
|
.aphront-dialog-view-standalone {
|
|
margin: auto;
|
|
}
|
|
|
|
.aphront-dialog-head .phabricator-action-header {
|
|
border-bottom: 1px solid {$lightblueborder};
|
|
padding: 4px 16px;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.aphront-dialog-head .phabricator-action-header
|
|
.phabricator-action-header-title {
|
|
font-size: 15px;
|
|
color: {$bluetext};
|
|
text-shadow: 0 1px 2px #fff;
|
|
}
|
|
|
|
.aphront-dialog-view-width-form {
|
|
width: 600px;
|
|
}
|
|
|
|
.aphront-dialog-view-width-full {
|
|
width: 90%;
|
|
}
|
|
|
|
.aphront-dialog-body {
|
|
background: #ffffff;
|
|
padding: 16px;
|
|
border: none;
|
|
}
|
|
|
|
.aphront-dialog-tail {
|
|
border: none;
|
|
background: {$lightgreybackground};
|
|
padding: 8px 16px;
|
|
border-top: 1px solid #d4dadf;
|
|
}
|
|
|
|
.aphront-dialog-foot {
|
|
padding: 6px 0;
|
|
float: left;
|
|
}
|
|
|
|
.aphront-dialog-tail button,
|
|
.aphront-dialog-tail a.button {
|
|
float: right;
|
|
margin-left: 8px;
|
|
}
|
|
|
|
.jx-client-dialog {
|
|
position: absolute;
|
|
width: 100%;
|
|
}
|
|
|
|
.jx-mask {
|
|
opacity: .75;
|
|
background: #fff;
|
|
position: fixed;
|
|
top: 0;
|
|
left: 0;
|
|
right: 0;
|
|
bottom: 0;
|
|
}
|
|
|
|
.jx-dark-mask {
|
|
background: #000000;
|
|
opacity: 0.9;
|
|
}
|
|
|
|
.aphront-exception-dialog {
|
|
width: 95%;
|
|
}
|
|
|
|
.aphront-exception-dialog .exception-message {
|
|
font-size: 14px;
|
|
background: #efefef;
|
|
padding: 1em;
|
|
white-space: pre-wrap;
|
|
}
|
|
|
|
.aphront-exception-dialog .exception-trace {
|
|
margin-top: 15px;
|
|
}
|
|
|
|
.aphront-exception-dialog .exception-trace-header {
|
|
font-size: 11px;
|
|
color: {$greytext};
|
|
border-bottom: 1px solid #aaaaaa;
|
|
padding-bottom: .5em;
|
|
margin-bottom: .5em;
|
|
}
|
|
|
|
.aphront-access-dialog {
|
|
width: 50%;
|
|
}
|
|
|
|
.aphront-access-dialog ul {
|
|
margin: 12px 24px;
|
|
list-style: circle;
|
|
}
|
|
|
|
.aphront-policy-rejection {
|
|
font-weight: bold;
|
|
}
|
|
|
|
.aphront-capability-details {
|
|
margin: 20px 0 4px;
|
|
}
|