Compare commits

...

272 Commits

Author SHA1 Message Date
Shivam Dave
c85cec0445 Merge remote-tracking branch 'upstream/master' into mobile_ins 2015-09-01 14:51:05 -07:00
Shivam Dave
e193223a37 [Mobile] Browse Cleaned
Cleaned up the browse.html
file to remove the excess inspector comments
and helper comments regarding individual
objects.
2015-08-31 14:14:05 -07:00
Shivam Dave
cb5429979a [Mobile] layout adjustment
Currently mobile css transition does
not work on phone portrait. Added
some not reached css classes used in old
slide menu.
2015-08-31 14:13:14 -07:00
Shivam Dave
46deabafee Merge branch 'mobile' into mobile_ins 2015-08-31 13:43:45 -07:00
Shivam Dave
021d105fd0 Merge remote-tracking branch 'upstream/open95' into mobile 2015-08-31 13:37:43 -07:00
Shivam Dave
7ffbc9ad2f [Remove Action] Check
Added check for traverseObject
context because prior to this,
was not checked.
2015-08-31 13:37:22 -07:00
Charles Hacskaylo
90f62b92a5 [Frontend] Super-minor cleanups in .scss files
open #93
2015-08-31 12:54:52 -07:00
Charles Hacskaylo
5a991076ea [Frontend] CSS and markup tweaks to enable flex layout
open #93
Layout frame and imagery markup modified;
2015-08-31 12:34:34 -07:00
Shivam Dave
78e8c15281 [Mobile] Tests
Removed treeSlide from the
browse controller test.
2015-08-28 14:18:49 -07:00
Shivam Dave
1f9728d29c [Mobile] Tests
BrowseObjectControllerSpec adjusted
to have a mockAgenstService. Test
completed.
2015-08-28 14:07:46 -07:00
Shivam Dave
08794346c8 [Mobile] Browse Object
Added comments and removed unnecessary
commented out code.
2015-08-28 13:56:48 -07:00
Shivam Dave
00f71d3882 [Mobile] Browse Object
By default, on opening the page in a
mobile device will have the tree menu closed.
Also simplified the if statement to a ternary
operation.
2015-08-28 13:55:09 -07:00
Shivam Dave
4cb01eb917 [Mobile] Browse Object
Added agentService to BrowseObjectController.
2015-08-28 13:53:53 -07:00
Shivam Dave
8e6505c80f [Mobile] Phone Portrait Close
Used merged function to close the
left tree on selection of an object
on phone portrait.
2015-08-28 13:38:29 -07:00
Shivam Dave
0521b09bec [Mobile] Merge
Added comments to _layout.scss
2015-08-28 13:17:17 -07:00
Shivam Dave
2b7a4d40eb [Mobile] Merge
Moved some of css 'sanding' over
to merged in slide menu. Also adjusted with
to be same as old show/hide tree dimensions.
2015-08-28 12:48:41 -07:00
Shivam Dave
43523046da [Mobile] Merge3
Set the placement of hamburger button as before
however moved it into browse.html and tied to
slide pane model.
2015-08-28 11:46:21 -07:00
Shivam Dave
d8e9b0e8e8 [Mobile] Merge2
Hamburger button used to perform slide
temporarily, also it has a different location
on mobile/desktop & different widths. Splitter is
working as intended on desktop.
2015-08-28 11:10:02 -07:00
Shivam Dave
2a288cd740 [Mobile] Merge 1
Part 1 of merge, sliding menu not
working, however right representation
works and the left tree is expanded.
2015-08-28 10:38:45 -07:00
Charles Hacskaylo
54bf39344a [Mobile] Multiple mobile Safari fixes
open #74
New mixins to prefix '-webkit-' to props and vals;
'flex' classes use new webkit mixins;
Fixed flex layout of .object-browse-bar and
.context-available element;
Migrated CSS to remove small .scss include files;
2015-08-27 17:05:50 -07:00
Charles Hacskaylo
683b3f7511 Merge remote-tracking branch 'github/mobile' into open74-m-master 2015-08-27 12:56:47 -07:00
Shivam Dave
510e7d1261 [Mobile] Merge
Merged with master, getting the
RemoveAction changes.
2015-08-27 12:15:48 -07:00
Shivam Dave
63b41d796a [Mobile] Clean Up
Cleaned up context menu gesture
comments with spacing.
2015-08-27 12:06:25 -07:00
Charles Hacskaylo
80a91970f6 Merge remote-tracking branch 'github/mobile' into open74-m-mobile 2015-08-27 11:34:14 -07:00
Shivam Dave
f0c64b6b92 [Browse] Back Arrow
Refactored Back Arrow to work same as prior
commit, however with less if else statements.
Returns if not at root, otherwise root is set to
true.
2015-08-27 10:45:48 -07:00
Shivam Dave
48136c2265 [Context] Back Arrow
Checks the Back Arrow in both checkRoot and
navigateToParent, also checks grandparent in both.
This allows the back arrow to hide in search when
context is unavailable.
2015-08-27 10:42:11 -07:00
Charles Hacskaylo
1961adf8d6 [Mobile] Fixed font-size and line-height problem in tree
open #74
2015-08-27 10:33:32 -07:00
Shivam Dave
8c4c65241a [Mobile] Tree
WHen selecting a leaf node on phone-portrait,
now the left menu will close if you select the
object name or the arrow.
2015-08-27 09:02:55 -07:00
Shivam Dave
67cb5f8077 [Mobile] Tests
Completed test for the BrowseController
Spec that takes in an undefined context.
2015-08-26 21:08:33 -07:00
Shivam Dave
bb2f086623 [Mobile] Leaf Node of Folder/Layout
Domainobjects that can hold an array of
domain objects return '[]' instead of
undefined, when checking for model.composition.
Now checks for empty array and navigates to layout/
folder that has no children.
2015-08-26 20:21:36 -07:00
Shivam Dave
a0169ad158 [Mobile] Browse Controller
Adjusted BrowseController to hide the
back button if current object represented/
selected has no context.
2015-08-26 20:20:16 -07:00
Charles Hacskaylo
6e172359b4 [Mobile] IN PROGRESS: Significant re-org of search results styling
open #74
Removed all styles for search-result-item
in search/_search.scss and significantly re-orged .tree-item in
_tree.scss and mobile/_tree.scss to control
search-result-item styles;
2015-08-26 18:15:29 -07:00
Charles Hacskaylo
d33678276c [Mobile] IN PROGRESS: Re-orgs after merge of Shivam's mobile branch
open #74
Re-applied changes to browse.html;
Added mobile/.../_search.scss;
Removed unused mobile/search/layout.scss;
Moved inclusion of search/_search.scss from tree.scss to main.scss;
2015-08-26 17:49:40 -07:00
Charles Hacskaylo
1cbca41c53 Merge remote-tracking branch 'github/mobile' into open74-merge-mobile 2015-08-26 16:55:15 -07:00
Charles Hacskaylo
a27083c28c [Mobile] IN PROGRESS: tweaked padding in form-row
open #74
2015-08-26 16:54:13 -07:00
Shivam Dave
def5e17bb8 [Mobile] Merge
Merged open73 into mobile. Search bar is currently
covering the create button slightly.
2015-08-26 14:07:52 -07:00
Charles Hacskaylo
b8b9721ddc [Mobile] IN PROGRESS: Hide name in view-switcher in mobile
open #74
2015-08-26 13:04:09 -07:00
slhale
c0201f04c0 [Inspector] Splitter undefined checking
Added undefined checking in case the splitter
has no associated element with a 'slide'
class. #73.
2015-08-26 12:55:26 -07:00
Charles Hacskaylo
f80266b23f [Mobile] IN PROGRESS: Styling in forms, overlay and tree
open #74
.section-header and form-row styles changed in forms/_elems.scss;
significant changes to overlay in mobile: full-screen, close button, more;
tree hover bg changed to use rgba(#fff, 0.1);
removed "Hide title by default" in core/bundle.json;
2015-08-26 12:34:45 -07:00
slhale
7a69bffb4a [Inspector] Add test
Added a test to the browse object controller to
regain 100% coverage. Tests initilization of
ngModel properties. #73.
2015-08-26 10:51:34 -07:00
Charles Hacskaylo
9a3009f327 [Mobile] IN PROGRESS: Styling on Create menu
open #74
2015-08-26 10:50:14 -07:00
slhale
05fb7173aa [Inpsector] Inspector icon
Change from gear to info icon. #73.
2015-08-26 10:44:11 -07:00
slhale
57d1876dd8 [Inspector] Fix inspector pane transition
Changed the pane transition so that on
pane open the inspector becomes invisible
after the pane starts opening. #73.
2015-08-26 10:43:03 -07:00
slhale
7119f6f3a1 [Inspector] Splitter drag temporarily removes transition
Dragging mct-splitter will remove a 'slide'
class from the splitter's sibling while a
drag is in process, and then replace the
'slide' class. This allows the left and right
panes to have slide transitions for open/close,
but not when the splitter is being dragged. #73.
2015-08-26 10:23:18 -07:00
Shivam Dave
2542255342 [Mobile] AgentService call
window referred to in TreeNodeController added as
keyword to skip in top comment.
2015-08-26 10:16:22 -07:00
Charles Hacskaylo
89bfa54563 [Mobile] IN PROGRESS: Misc layout tweaks; treeview pane styling
open #74
Treeview pane darkened;
Spacing in frame tweaked;
#content-area in right pane hidden
when treeview expanded for
phone portrait only;
Removed mobile-pane and
desktop-browse classes from markup;
2015-08-26 10:08:57 -07:00
Shivam Dave
793c99ac2f [Remove] Tests
RemoveActionSpec test complete, tests if
parent is object is removed. Also tests if
object not in object path is removed.
2015-08-26 10:02:16 -07:00
Charles Hacskaylo
39bd292886 [Mobile] IN PROGRESS: Overlay and form cleanups
open #74
Widths and layout strategy fixed for label and
controls in form when appearing in mobile;
Overlay margins adjusted;
Cleaned up font size, line-height in tree items;
2015-08-26 09:43:51 -07:00
slhale
86d398d8ff [Inspector] Fix location label text
Fixed the location object labels so that their
overflow text properly gets hidden, and so that
the direction arrows are aligned with the
labels. #73.
2015-08-25 16:30:57 -07:00
Shivam Dave
e8bc9ecc1a [Search, Mobile] Merge
Merged search/master into mobile. Adjusted the
search bar to work on branch and fit accordingly.
2015-08-25 15:27:21 -07:00
slhale
5cc634e946 Merge branch 'open72' into open73
Conflicts:
	platform/commonUI/general/res/css/theme-espresso.css
2015-08-25 15:02:57 -07:00
slhale
7e837c266d Merge branch 'master' of https://github.com/nasa/openmctweb into open73
Conflicts:
	platform/commonUI/browse/res/templates/browse.html
2015-08-25 14:59:13 -07:00
slhale
cd204af71c [Treeview] Compatability with search
Update to hide search bar when the pane is
closed. #72.
2015-08-25 14:55:23 -07:00
slhale
4e9348cb28 Merge branch 'master' of https://github.com/nasa/openmctweb into open72
Conflicts:
	platform/commonUI/browse/res/templates/browse.html
2015-08-25 14:52:51 -07:00
Shivam Dave
0fa330adff [Mobile] Tests
Adjusted TreeNodeControllerSpec to
test setObject prototype.
2015-08-25 14:49:38 -07:00
Shivam Dave
9cd57614e4 [Mobile] AgentService & Tests
Adjusted the getOrientation of agentService to
inject the window instead of calling for it in
agentService. Also adjusted treeNodeController
for this. Added tests for the agentService's
getOrientation function.
2015-08-25 14:33:48 -07:00
slhale
c4de3505b9 [Inspector] Location horizontal overflow
Modified location labels to have cut-off text
be indicated by ellipses when the inspection
pane width is small. #73.
2015-08-25 14:30:42 -07:00
Shivam Dave
d80c359a86 [Mobile] Tests
Fixed BrowseControllerSpec test
to account for new  call. Now
expects destroy and select-obj calls.
2015-08-25 14:20:36 -07:00
Charles Hacskaylo
07d0706cd1 [Mobile] IN PROGRESS:
open #74
Added name for "base" (unknown) type in core/bundle.json;
Fixes to grid-item .details element:
- ellipsize,
- type now displayed properly;
- number of items with correct plural syntax;
2015-08-25 14:17:34 -07:00
Charles Hacskaylo
fd5a911d50 [Mobile] IN PROGRESS: Fixed object-browse-bar flex
open #74
Also set left position of .object-browse-bar;
2015-08-25 13:51:02 -07:00
Charles Hacskaylo
c71f1fe447 [Mobile] IN PROGRESS: Significant refactor in mobile/_layout.scss
open #74
Made view-switcher visible when browsing via mobile;
Fixed class in browse.html markup from left-menu to left;
Moved object-browse-bar, top-bar classes from _controls into _layout;
Renamed and simplified menu widths in mobile _constants;
Really significant refactor of mobiles/_layout;
Tweaks in user-environ/_layout;
TO-DO: figure out why object-browse-bar flex styles not
working in mobile;
2015-08-25 13:34:37 -07:00
slhale
c3e5fbf713 [Inspector] Location does not include self
Changed the object inspector's location getting
to not include the object itself in the
location, just its ancestors. #73.
2015-08-25 13:06:15 -07:00
Shivam Dave
cd46dab5c1 [Mobile] Merge
Merged with master and resolved conflicts.
2015-08-25 12:36:50 -07:00
slhale
5080b5296e [Inspector] Consistent link and nonlink style
Changed stlying on the labels for parent
lists to have more consistent styling
between the link and nonlink parents. #73.
2015-08-25 11:14:41 -07:00
slhale
7a7cabedcc [Inspector] Add hovertext and scrolling
Made the inspector capable of scrolling.
Added hovertext to the contextual and
primary location sections for some
clarification. #73.
2015-08-25 10:18:31 -07:00
Charles Hacskaylo
e1858bf0ae [Mobile] IN PROGRESS: Moved position of view-switcher
open #74
view-switcher in object browse and edit moved to precede
action buttons, with margin;
Re-located CSS for .btn, etc. from _controls.scss to _layout.scss;
Cleaned up line-spacing in object-header in .frame;
2015-08-25 10:15:14 -07:00
Charles Hacskaylo
7542c6d49a [Mobile] IN PROGRESS: Cleanups on .btn for line-height, sizing, etc.
open #74
2015-08-25 09:41:38 -07:00
Charles Hacskaylo
13b66cd215 [Mobile] IN PROGRESS: Only display custom scrollbars in desktop mode
open #74
2015-08-24 17:04:38 -07:00
Shivam Dave
aca06c6007 [Action] Remove Action Merged
Remove Action merged to allow removal of
parent or current selected object, then
navigation to lowest existing parent if
currently located in deleted object.
2015-08-24 16:46:48 -07:00
Charles Hacskaylo
5184e08a5b [Mobile] IN PROGRESS: Tweak to TypeImpl to return glyph for unknown types
open #74
Thanks Victor!;
2015-08-24 16:45:55 -07:00
Charles Hacskaylo
69c6d4bd26 [Mobile] IN PROGRESS: Tweaks to labels;
open #74
Cleaned up layout of bottom-bar;
Fixed class selector for ue-bottom-bar;
2015-08-24 16:31:38 -07:00
Shivam Dave
6a2bdd103b [Mobile] Hide Tree
On selecting a node in the tree, if the
user is on phone and in portrait, than
emit up to the browse controller to call
treeSlide(), which will hide the tree menu.
Also adjusted the agent service to properly
check for orientation using window.innerHeight/
Width. Also created function for the selection
of an object in BrowseController.
2015-08-24 16:17:58 -07:00
slhale
33d88ecce0 [Inspector] Update tests
Updated the object inspector controller spec to test
for the different types of locations. #73.
2015-08-24 16:16:15 -07:00
slhale
70324a2198 [Inspector] Separate primary and contextual locations
The object inspector now finds both the contextual
location of the link and the primary location of
the original, if the selected object is a link. #73.
2015-08-24 15:49:57 -07:00
Charles Hacskaylo
76c4b96683 [Mobile] IN PROGRESS: Menu hide/show fixes; font-size tweaking
open #74
Changed .right-repr to use translateX in phone portrait mode;
font-size tweaking;
Refactored css organization in mobile/_layout.scss;
2015-08-24 15:24:35 -07:00
slhale
41198627c3 Merge branch 'master' of https://github.com/nasa/openmctweb into open72
Conflicts:
	platform/commonUI/general/res/css/theme-espresso.css
2015-08-24 13:08:48 -07:00
slhale
454b96c3c9 Merge branch 'master' of https://github.com/nasa/openmctweb into open73
Conflicts:
	platform/commonUI/general/res/css/theme-espresso.css
2015-08-24 13:06:44 -07:00
slhale
b8eaea5624 [Inspector] Add tests
Added tests for the object inspector controller.
Removed unused objectService dependency. #73.
2015-08-24 13:01:38 -07:00
Charles Hacskaylo
44ed4e0e0d [Mobile] IN PROGRESS: Minor tweak for line-height in top-bar
open #74
2015-08-24 12:39:50 -07:00
slhale
d5062c74a2 [Inspector] Stlying tweak
Made titles taller so that they weren't
squished with the data.
2015-08-24 12:35:13 -07:00
slhale
d877ee3ce3 [Inspector] Use metadata capability
Instead of manually getting each entry for
the object inspector, just get the selected
object's metadata capability.
Still need to manually get the parents. #73.
2015-08-24 12:32:31 -07:00
Charles Hacskaylo
e96d3e3738 [Mobile] IN PROGRESS: Significant redo of object-header
open #74
Added .bar .l-flex using display: flex in object header;
2015-08-24 12:22:08 -07:00
slhale
57e3c2554d [Inspector] Pane tab button tweaks
Changed size and position slightly. Icon when
closed different.
2015-08-24 10:57:50 -07:00
slhale
67e57081f4 [Inspector] Right pane transition
Created the sliding transition for when the
object inspector pane opens or closes.
2015-08-24 10:47:14 -07:00
slhale
7715acd4d4 [Inspector] Right pane opens and closes
Added collapser button to open and close
the right pane holding the object inspector.
2015-08-24 10:24:35 -07:00
slhale
e53c419e87 [Inspector] Add shadow to link icon 2015-08-24 09:38:35 -07:00
slhale
6e8dcc6ab8 [Inspector] Fix location label heights
Made it so that the last element of the location
does not get misaligned.
Also changed the element background highlighting
and arrow size.
2015-08-24 09:26:39 -07:00
Charles Hacskaylo
039d692e4c Forgot to add new .scss file
open #74
2015-08-21 15:10:19 -07:00
Charles Hacskaylo
ee608cc4a4 [Mobile] IN PROGRESS: General fixes, spurred by mobile, for object-header
open #74
Attempting to layout using flex - not working;
See http://jsfiddle.net/charlesh88/cpf9zjts/9/ for working example;
New _flex.scss added;
This commit is changed elements that are mostly solid;
2015-08-21 15:09:23 -07:00
slhale
bbcb0e15c9 [Inspector] Location in tree
Added a 'location' section for the inspector panel. Its
elements are clickable labels. #73.
2015-08-21 13:19:49 -07:00
Charles Hacskaylo
da8eb334e3 [Mobile] Sanding of mobile styles continues, in progress
open #74
CSS and markup changes for split pane holders;
drop shadow added to tree area;
Tree item cleanups;
This or earlier commit broke treeview nav action;
TO-DO: fix treeview nav action to hide menu;
2015-08-20 18:36:44 -07:00
slhale
7b5f07ae45 [Inspector] Inspector style
Added stlying to the inspector. Still need to find
proper icon. #73.
2015-08-20 16:52:21 -07:00
Charles Hacskaylo
67592def90 [Mobile] Sanding of mobile styles, in progress
open #74
CSS and markup changes for mobile,
particularly on grid-item;
Mod to behavior in tree for mobile nav:
leaf node grid-item click now navs to item;
Fixed info-button to work properly with mod to
infoButtonGesture.js;
2015-08-20 16:11:45 -07:00
Charles Hacskaylo
3484b315cf [Mobile] Sanding of mobile styles, cherry-pick to master
open #74
CSS and markup changes for mobile
that are good for master now;
2015-08-20 16:09:35 -07:00
slhale
3343475973 [Inspector] Add mct-object-inspector representation
Still having some styling issues though.
2015-08-20 16:01:08 -07:00
slhale
71207d643a [Inspector] Left pane close works again
Moved ng-class up to a parent so that the
left position would be correct relative to
the left split overall. #73.
2015-08-20 15:21:14 -07:00
slhale
d9a65a1844 [Inspector] Add right pane
Added a right pane to the page. This was done by
putting an mct-split-pane nested inside of the
existsing mct-split-pane. #73.
2015-08-20 15:11:16 -07:00
slhale
32c7cc2424 [Treeview] Cleanup order
Rearrange the sass so that classes appear in the
order that they appear in browse.html, with
correct nesting as well.
No changes to the actual UI from this.
2015-08-20 14:51:32 -07:00
slhale
dcfcfa74bb Merge branch 'master' of https://github.com/nasa/openmctweb into open72
Conflicts:
	platform/commonUI/general/res/css/theme-espresso.css
2015-08-20 13:25:39 -07:00
slhale
79529e4879 [Treeview] Open in new tab settings
When an object is opened in a new tab, the left
pane will be closed by default. Otherwise it will
be open by default. #72.
2015-08-20 13:14:57 -07:00
slhale
503c8e2f03 [Treeview] Collapse button styling
Changed color to better match topbar buttons.
Icon changes direction when pane is open vs
closed.
2015-08-20 13:02:40 -07:00
slhale
570e0f31b2 [Treeview] Rename layout to pane
To better reflect what the file is modifying
2015-08-20 12:05:48 -07:00
slhale
83c86c748c [Treeview] Remove unnecissary file
_splitter.scss merged into _layout.scss, within the
tree folder
2015-08-20 11:59:03 -07:00
slhale
4b3ca316e1 [Treeview] Update tests
For the existence of ngModel
2015-08-20 11:50:44 -07:00
slhale
3f7b874b38 [Treeview] Remove console.log 2015-08-20 11:47:16 -07:00
slhale
ed96889fce [Treeview] Fix splitter bar movement
Fixed the splitter bar so that it is now
draggable again.
2015-08-20 11:25:11 -07:00
slhale
d2bc8227c7 [Treeview] Create button and slide transition
Made the create button visible when the left
pane is closed. Added a transition between
opening and closing the pane.
2015-08-20 10:41:30 -07:00
Charles Hacskaylo
b1e1e85bbd Merging in latest openmctweb master
open74
Had to resolve conflicts
2015-08-20 10:36:41 -07:00
slhale
81ece1190e [Treeview] Collapse button styling
Made smaller, with flat left side.
2015-08-20 09:19:09 -07:00
slhale
62f7ca5a0a [Treeview] Treeview collapse toggle
Clicking on the pane tab now toggles the
treeview.
2015-08-19 16:57:11 -07:00
slhale
29b1cfa890 [Treeview] Rename variable for clarity
paneModel's pane to leftPane, for clarity
once a right pane is added.
2015-08-19 16:47:12 -07:00
slhale
e44e50823e [Treeview] Treeview collapse
Clicking on the pane tab now will make the treeview
invisible, and set the width to 0. BUT, this does
not immediately move the splitter bar, though it
does go to the correct width if clicked.
Needs more work.
2015-08-19 16:44:42 -07:00
slhale
4a730f875f [Treeview] Clicking toggles model property
Clicking on the pane tab icon toggles ngModel.pane
2015-08-19 16:29:55 -07:00
slhale
8108a3b81c [Treeview] Html style 2015-08-19 16:02:49 -07:00
slhale
b8958edf72 [Treeview] Fixing errors, commits 2015-08-19 16:00:51 -07:00
slhale
2b00b71da9 [Treeview] Error fixing
Trying to get mctSplitter error to be fixed.
Reverting to an extent.
2015-08-19 15:45:17 -07:00
slhale
9c912b62d3 [Treeview] Modified left splitter
Added a 'button' (which does not work yet). It
sticks out of the splitter like a tab.
2015-08-19 15:08:27 -07:00
slhale
ffd80ed42b [Treeview] Style
Changed indentation in the html
2015-08-19 13:12:37 -07:00
slhale
8dad6a3fd5 Merge browse files from branch 'mobile' into open72 2015-08-19 13:04:11 -07:00
Shivam Dave
c4dd4f5c45 [Mobile] Merge
Merged with master.
2015-08-19 11:01:58 -07:00
Shivam Dave
63a99f26f6 Merge branch 'mobile_3' into mobile 2015-08-06 14:13:13 -07:00
Shivam Dave
7ca15a9de2 [Mobile] Representation
Edited grid item to center
shared button.
2015-08-06 14:11:59 -07:00
Shivam Dave
7ac1d2458a Merge remote-tracking branch 'origin/mobile_3' into mobile 2015-08-06 13:45:45 -07:00
Shivam Dave
0bc4f2dc6e Merge remote-tracking branch 'upstream/master' into mobile 2015-08-06 13:45:37 -07:00
Shivam Dave
dcd7d61c9a [Mobile] Tests
Completed ContextMenu and InfoButton
Gesture tests where elements/body
touch events occur.
2015-08-06 13:43:56 -07:00
Shivam Dave
7c17581659 Merge remote-tracking branch 'origin/mobile_3' into mobile
Merged fixes regarding circleci check failure
2015-08-05 12:27:20 -07:00
Shivam Dave
0a39984c4f [Mobile] Clean Up
Fixed InfoService having 0 in
wrong spot. Also correctly compared
the UserAgent device to iPhone for
isMobile function in AgentService.
2015-08-05 12:26:09 -07:00
Shivam Dave
a146185bd2 Merge remote-tracking branch 'origin/mobile_3' into mobile 2015-08-05 12:17:49 -07:00
Shivam Dave
0b635afcf7 [Mobile] Tests
ContextMenu and InfoButton Gesture
tests remain.
2015-08-05 12:14:16 -07:00
Shivam Dave
f46a0853b9 [Mobile] Tests
Removed mockMenu from ContextMenuGestureSpec.
2015-08-04 16:58:37 -07:00
Shivam Dave
66c81ce3d6 Merge remote-tracking branch 'upstream/master' into mobile 2015-08-04 16:53:45 -07:00
Shivam Dave
6b65ae77e7 [Mobile] Tests
Completed tests for AgentService,
InfoService, and ContextMenuAction.
ContextMenu and InfoButton Gesture
tests remain. Also resized info button
icon.
2015-08-04 16:48:41 -07:00
Shivam Dave
66408eeec8 [Mobile] Gestures
Now to dismiss bubble, touch anywhere
the touch will not fire other gestures
(such as the pressing of another object).
2015-08-04 13:41:48 -07:00
Shivam Dave
3d524d7572 [Mobile] AgentService
Replaced name queryService with agentService.
2015-08-04 10:11:25 -07:00
Shivam Dave
9b922913a0 [Mobile] Gestures
Added styling to back and selection
arrow (tree). Also increased the space
allowed for selection arrow on tree item.
Info Button created on grid items for mobile.
Info bubble appears on tablet like desktop.
Also on mobile, info bubble fits to width.
New QueryService that returns if on iPhone.
Also formatted dialog box so that their is no
margin and takes up fullscreen on mobile.
2015-08-04 09:59:08 -07:00
Shivam Dave
560a2e035e [Mobile] Info Button
Added info button to grid/list items
on mobile. When the button is pressed,
info bubble appears for 750ms or the
same infobutton is pressed to dismiss
immediately.
2015-07-31 11:13:52 -07:00
Shivam Dave
eca52a8ca6 Merge remote-tracking branch 'upstream/master' into mobile_3 2015-07-31 09:09:31 -07:00
Shivam Dave
2983ebb2c6 Merge branch 'mobile_3' into mobile 2015-07-30 14:11:08 -07:00
Shivam Dave
25e8bb44d2 [Mobile] Item Height
Adjusted item height in
folder/layout list to be
automatically same as the
list object, not flowing over.
Applied to both phones and tablets.
2015-07-30 14:10:43 -07:00
Shivam Dave
1a8eece90f Merge branch 'mobile_3' into mobile 2015-07-30 13:35:40 -07:00
Shivam Dave
85658d3d1f [Mobile] Tests
Removed tests causing incomplete
build.
2015-07-30 13:33:59 -07:00
Shivam Dave
ddce0f371d [Mobile] Test
Removed extra mockEvent from test.
2015-07-30 13:32:24 -07:00
Shivam Dave
495cd06ed5 [Mobile] Tests
adjusted test to fill empty
functions.
2015-07-30 13:30:03 -07:00
Shivam Dave
1624866656 [Mobile/Bug] RemoveAction
When removing object you have
openned, now compares the currentObj
id with the removed obj id, resulting
in navigating to parent if they are the
same.
2015-07-30 13:27:56 -07:00
Shivam Dave
2d1aa65d63 [Mobile] Test
BrowseController test adjusted to
repeat less code.
2015-07-30 12:50:39 -07:00
Shivam Dave
c333a2e70a [Mobile] Test
Repeat of test variable deleted.
2015-07-29 16:31:38 -07:00
Shivam Dave
906354764b [Mobile] Tests
Has way to make isMobile call
true or false for mobile/nonmobile
devices.
2015-07-29 15:06:39 -07:00
Shivam Dave
12ec293f3d [Mobile] Tests
Changed BrowseController and RemoveActionSpec to account
for grandparent and navigation usage. Also changed
RemoveAction variable name.
2015-07-29 13:57:11 -07:00
Shivam Dave
bdf8b4d3f1 [Mobile] Test for Back Arrow
Added tests for the backarrow and
when it appears/disappears.
2015-07-29 13:22:47 -07:00
Shivam Dave
6e60088b11 [Mobile] RemoveAction
Removed console and added
navigationService (mock) to the
spec version.
2015-07-29 11:58:53 -07:00
Shivam Dave
97bf530b1d [Mobile] BackArrow
Removed the BackArrow console log
that was getting called in the
BrowseController.
2015-07-29 11:41:10 -07:00
Shivam Dave
18348476c6 [Mobile] RemoveAction Tweak
If you remove an object you are
currently within/opened, then on
removal of it you navigate to the
parent of whatever you removed.
2015-07-29 11:38:47 -07:00
Shivam Dave
7e35e55f0b [Mobile] Hide Back Button
When you are at the highest level the
back button fades out and is unclickable.
When you are able to go up a level the
back button appears/fades in and is
pressable. Also removed the object type
name from the header.
2015-07-29 11:13:09 -07:00
Shivam Dave
28a2a5b92a [Mobile] Tweaks to layout
Removed the user-select option
for the context menu and bottom bar
on mobile. Also edited the folder
grid item so that its icon rep
size is not overly large.
2015-07-29 10:39:17 -07:00
Shivam Dave
d262520594 [Mobile] Tree menu Open
Tree menu select arrow button's width
is now size of full button. Prior to this
the pressable area was less and therefore
less responsive.
2015-07-29 10:25:09 -07:00
Shivam Dave
7cc14a195b [Mobile] Tests/Header
Removes back arrow on desktops.
Also added queryService to tests
for the context menu action and
gesture.
2015-07-29 10:00:03 -07:00
Shivam Dave
84b9e4d781 [Mobile] Context Menu
Context menu next to object header
now dismisses when touching away
from it. Also, when long touching
an object, the context menu appears.
Set on 500ms timeout.
2015-07-28 17:09:15 -07:00
Shivam Dave
52e0476d24 Merge branch 'mobile_3' into mobile 2015-07-28 15:57:02 -07:00
Shivam Dave
86340623f7 Merge remote-tracking branch 'upstream/master' into mobile 2015-07-28 15:56:43 -07:00
Shivam Dave
356fa73c91 [Mobile] Tests
Test created for backArrow
that spies on all objects
used to find parent.
2015-07-28 15:55:22 -07:00
Shivam Dave
a073ef69ac [Mobile] Back Arrow
Shifted Back Arrow down to
align with header.
2015-07-28 15:15:42 -07:00
Shivam Dave
3c6c420023 [Mobile] Back Arrow
Back Arrow implemented
by getting parent and then
navigating to it.
2015-07-28 15:08:14 -07:00
Shivam Dave
21964fe68e [Mobile] Demo Setup
Added lines to circle.yml
for mobile demo branch.
2015-07-28 11:08:10 -07:00
Pete Richards
62714bb97c [Continuous] Deploy to staging-un 2015-07-28 11:04:09 -07:00
Shivam Dave
2a4943f584 [Mobile] Console
Removed call to console so
mvn clean install would compile.
2015-07-28 10:58:22 -07:00
Shivam Dave
e32403a75f [Mobile] Clean-Up
Cleaned the unused code for the
backArrow and long touch gestures.
Commented out functions for later use
Currently shows the back arrow, however,
only will print to console on press.
Edited tests where mobile checks were breaking
and fixed.
2015-07-28 10:56:29 -07:00
Shivam Dave
b0c42c12b7 [Mobile] Back Arrow
Changes URL correctly that
is printed to the console. Is the
url to up one level of objects.
However not navigating to that
object.
2015-07-27 17:01:30 -07:00
Shivam Dave
621ccc25ec [Mobile] Back Arrow HTML
Created HTMl for back arrow,
next neew to hook up a click.
2015-07-27 15:31:47 -07:00
Shivam Dave
617df739ee [Mobile] persistence
Removed elasticsearch.
2015-07-27 15:26:09 -07:00
Shivam Dave
6e43a92191 [Mobile] Merge
Fix Conflicts.
2015-07-27 15:21:59 -07:00
Shivam Dave
1d7a0fa48d [Mobile] Removed InfoGesture
Commented out infogesture.
2015-07-27 11:30:29 -07:00
Shivam Dave
30c530178a [Mobile] No ContextMenu
Removed context menu code
started to be used for the
long hold gesture.
2015-07-27 11:01:03 -07:00
Shivam Dave
3d0795cde3 [Mobile] Starting Context
Added check to make sure
user is touching only one object.
Started contextmenugesture to be
long touch, however currently long
touch is still infogesture.
2015-07-27 10:20:08 -07:00
Shivam Dave
c85a3787c0 [Mobile] User-Select
Edited user-select used in
panes' layout to only
happen on phones and tablets
(just to be safe).
2015-07-24 16:46:45 -07:00
Shivam Dave
066258ab83 [Mobile] User-Select
Removes the copy/define
mobile safari menu that
appears during some touch events.
Only apply to left and right panes.
2015-07-24 16:19:15 -07:00
Shivam Dave
ddc2295ec3 [Mobile] Touch Hold Gesture
Rough touch hold gesture added
to the info gesture. Currently
if you hold on an item (that you
would normally hover over) for
500ms, you get the info gesture pop
up.
2015-07-24 16:02:06 -07:00
Shivam Dave
011e6fc512 [Mobile] Clean Up
Moved Mobile check in InfoGesture to
call on mouseEnter.
2015-07-24 15:27:33 -07:00
Shivam Dave
91bd58215a [Mobile] Size Adjustment
Moved hamburger icon slightly up
using the padding instead of
margin.
2015-07-24 12:38:01 -07:00
Shivam Dave
b37ee19fbc [Mobile] Size Adjustment
Adjusted indentation size
on the tree. Also change size of the
hamburger icon to match the
object icon and moved it slightly
down.
2015-07-24 12:35:19 -07:00
Shivam Dave
2355d354b3 [Mobile] Items List
Flushes items left and
vertically centers the
title/details. Also cleaned
up the items classes in sass
files.
2015-07-24 11:46:58 -07:00
Shivam Dave
200c6e49fc [Mobile] Test
QueryService (mock) added to the
ContextMenuGestureSpec to account
for isMobile call that allows/
disallows use of contextmenu
gesture.
2015-07-23 16:55:45 -07:00
Shivam Dave
a89f9eed42 [Mobile] Grid List/Gestures
Context menu only shown with contextmenu
click on desktops (non-mobile devices). Also
edited items list in a folder's representation
to show the icon on the left side, with text
centered horizontally (only mobile).
2015-07-23 16:47:57 -07:00
Shivam Dave
7993e4c03f [Mobile] Gestures
Removed the hover coloring on
the tree menu on mobile by changing
original** scss code. Also added
check in ContextMenuGesture that
will only allow context menu to appear
in non-mobile browser.
2015-07-23 15:01:14 -07:00
Shivam Dave
b592b89dc8 [Mobile] Clean Up
Removed unnecessary transitions.:
2015-07-23 14:15:01 -07:00
Shivam Dave
d115166dde [Mobile] Comments
Added comments and removed
unwanted spec test code for
BrowseController.
2015-07-23 13:48:21 -07:00
Shivam Dave
d176f9f811 [Mobile] Test
Fixed BrowseControllerSpec.js to
account for the .treeslide
call and added a new test for thatasds
2015-07-23 13:46:46 -07:00
Shivam Dave
143e3eeb6c [Mobile] CleanUp/Tests
Added tests inside spec files
for the QueryService, TreeNodeController,
and InfoGesture. Also cleaned up the
tree so that padding is used between
buttons instead of margins.
2015-07-23 13:19:58 -07:00
Shivam Dave
b3bc8b6876 [Mobile[ Tests
Added jasmine test for

QUerySerivce and adjusted
the InfoGestureSpec to
account for use of
QueryService.
2015-07-23 09:28:36 -07:00
Shivam Dave
1f7ba70ad7 [Mobile] Scroll Bug
Removed scrollbar that appears in landscape
mode in tree menu.
2015-07-22 15:21:34 -07:00
Shivam Dave
7aba3b6672 [Mobile] Clean Up
Removed gap below bottom bar. Moved
around constants for the resizing
of the tree. Also added comments in
layout and reformatted that slightly.
2015-07-22 12:53:49 -07:00
Shivam Dave
926b3d075c [Mobile] Clean Up
Cleaned up scss files. Removed
repeated statements and added
comments. Also commented js files
like QueryService and InfoGesture.
2015-07-22 10:25:21 -07:00
Shivam Dave
827cb27f28 [Mobile] Menu
Added margin to top of tree list items.
Also removed hovering Info coming
up on mobile devices.
2015-07-21 16:19:59 -07:00
Shivam Dave
0842f464db [Mobile] Menu Adjustment
Makes highlight go all the way to right.
Also makes the arrow be absolute on the
right side, making it aligned to right.
2015-07-21 14:29:13 -07:00
Shivam Dave
56e51ea32a [Mobile] Reformat of menu
Reformats menu to move the
arrow to the right and now
that is what selects an object.
Pressing the actual menu item will
enact the dropdown menu. This
only happens on mobile platforms.
2015-07-21 13:29:45 -07:00
Shivam Dave
dcdafbaebf [Mobile] Fix Shift
Shifting occurring during transition
fixed by making transition backface-
visibility hidden during the
transition.
2015-07-20 10:25:27 -07:00
Shivam Dave
f98915cddd [Mobile] Comments
Added comments to the mixin list.
2015-07-20 09:51:37 -07:00
Shivam Dave
4e6c307684 [Mobile] Transition
Adjusts transition time on fade.
2015-07-20 09:48:12 -07:00
Shivam Dave
ce6d74390e [Mobile] Clean-Up
Removed unnecessary classes. Also added
comments and adjusted menu sizes.
2015-07-20 09:39:06 -07:00
Shivam Dave
6e406fd060 [Mobile] Right Pane sets
Right pane sets the size of itself,
causing the left pane to re-adjust
to fit the screen based on it. Also
transitions work on the slide and the
fade in.
2015-07-20 09:16:28 -07:00
Shivam Dave
2614427e0e [Mobile] Fix
Fixed to open menu fully.
2015-07-17 14:32:33 -07:00
Shivam Dave
272c6bca97 [Mobile] Create Menu
Create menu's is specified/overwritten
with 1000% (change) to fit on mobile).
Also gets rid of the right bar in that view.
2015-07-17 10:50:02 -07:00
Shivam Dave
0d7387080d [Mobile] Create Menu
Create menu text has ellipsis
attribute now, so if text is cut off
it will have a '...' appended to it.
Also added comments to mixins.
2015-07-17 10:28:19 -07:00
Shivam Dave
1e2e20b145 [Mobile] Comments
Added comments to the mixins.
2015-07-17 09:04:39 -07:00
Shivam Dave
488829a20c [Mobile] Header
Removed type from header
along with the right side buttons.
2015-07-16 16:13:58 -07:00
Shivam Dave
85c7a36e25 [Mobile] Cleaned up
Set the width of the create menu
text/components to fit the menu
however it gets cuttoff sometimes.
Next steps are to Clean up screen,
change the create menu to fit the left side,
and fix bottom space.
2015-07-16 15:21:17 -07:00
Shivam Dave
d99b4d75d8 [Mobile] Fix
Fixed the desktop version breaking.
CUrrent issue is hte menu is getting cut off.
2015-07-16 14:07:25 -07:00
Shivam Dave
15a88967d0 [Mobile] Transition/Create Fix
Fix the create button to work and
also transition well. Added transition mixin
to stay DRY.
2015-07-16 13:22:07 -07:00
Shivam Dave
6e6fbe0d65 [Mobile] Transitions
Made transitions properly work for
create button.
2015-07-16 12:54:10 -07:00
Shivam Dave
180e5f14ae [Mobile] Cleaned up
Made pane sass code more DRY by
using the phoneandtablet mixin
on repeated conditions.
2015-07-16 12:25:06 -07:00
Shivam Dave
e9314898d2 [Mobile] Portrait & Landsc.
Specifies amounts based on phone and tablet's
orientation. Not tested for the actual device,
but emulator. Also currently makes the create
button appear/disappear instead of smoothly sliding.
2015-07-16 11:50:55 -07:00
Shivam Dave
ce75d19480 [Mobile] Desktop
Cleans up the _layout by making the different
pane sizes device specific. Also adds a new
sass class just for desktop versions.
2015-07-16 10:44:20 -07:00
Shivam Dave
a9dd1f9828 [Mobile] Transistions
Cleaned up and added transitions.
2015-07-15 16:57:36 -07:00
Shivam Dave
4b5540830b [Mobile] Slide menu
Rouch menu using important to
overwrite splitter setting of
amounts. Also has default values
for now for all devices.
2015-07-15 16:49:16 -07:00
Shivam Dave
ee35976c92 [Mobile] Tree Mobile
Added mobile/_tree.scss and edited
normal tree.scss to accomodate for
future sass that adjusts the tree
menu.
2015-07-15 13:30:06 -07:00
Shivam Dave
54b6cd1100 [Mobile] Debug
Added debug statement to print
to console.
2015-07-15 13:28:42 -07:00
Shivam Dave
0f89e98a71 [Mobile] Clean up
Cleaned up layout and added phone only hider.
Also added tree.scss file, where all tree
node classes will be placed.
2015-07-14 14:14:12 -07:00
Shivam Dave
6f07a21bb8 [Mobile] Clean-up
Cleaned up scss and also, the
edit/new tab/full screen buttons are
hidden in mobile, temporarily.
2015-07-14 13:10:28 -07:00
Shivam Dave
f3678d9d52 Merge remote-tracking branch 'origin' into mobile_1 2015-07-14 13:08:54 -07:00
Shivam Dave
9a7bbd92bd [Mobile] Cleaned up
Cleaned up the transistion css to
be more DRY.
2015-07-13 17:04:14 -07:00
Shivam Dave
edcafc5835 [Mobile] Remove Bar
Remove the splitter bar on mobile
and tablets.
2015-07-13 13:56:44 -07:00
Shivam Dave
7d09df9a85 [Mobile] Constants
Re-edited media query constants
to be cleaner and consistent.
2015-07-13 13:11:27 -07:00
Shivam Dave
b00eee00fc [Mobile] Redefine
Renames variables to be clearer.
Breaks up constants into parts to be
cleaners and straightforward. Also
removed the ratio.
2015-07-13 13:02:57 -07:00
Shivam Dave
c0d83f9395 [Mobile] Format
Reformatted the rwd media
query rules.
2015-07-13 12:39:09 -07:00
Shivam Dave
be757066f5 [Mobile] Desktop adjusted
Adjusted the desktop to accomodate browser
orientation changes. Done so by forgoing
checking the orientation because the
actual device can be in landscape, but it
reads orientation based on the viewport.
2015-07-13 11:18:51 -07:00
Shivam Dave
885433390e [Mobile] Fix for emu and act
Adds 2 landscape conditions for tablets and
phones to check if they are in landscape, in
the actual tablet, or in an emulate of the tablet,
then it displays.
2015-07-13 10:32:58 -07:00
Shivam Dave
687f810475 [Mobile] Constants
Fixed width constant to work for laptop.
2015-07-13 10:23:28 -07:00
Shivam Dave
137a60f510 [Mobile] Constants
Fixed constants to work for laptop.
2015-07-13 10:16:52 -07:00
Dave
46d5a1431f [Mobile] Added Constants
Rixed mis-initialized desktop
constant
2015-07-13 09:24:01 -07:00
Dave
404d02ec23 [Mobile] Added Constants
Re-edited constants to set min
ones for the desktop screen, that
is based on the device size.
2015-07-13 09:17:59 -07:00
Shivam Dave
eec955317a revert back to
4d9dc3624b
2015-07-10 12:47:00 -07:00
Dave
67890a7298 [Mobile] Test 2015-07-10 12:38:04 -07:00
Dave
dd457f26c6 [Mobile] Device
Added max width to tablet check.
2015-07-10 12:32:34 -07:00
Dave
85c6bda5c9 [Mobile] Device
Adjusted Tablet slide Constant.
2015-07-10 12:21:13 -07:00
Dave
b7b5f87002 [Mobile] Device
Adjusted Comp Constant.
2015-07-10 12:16:43 -07:00
Dave
b0c5d807e7 [Mobile] Device
Removes splits desktop
settings into 2, one
for landscape and another
for portrait.
2015-07-10 11:51:56 -07:00
Dave
4d4776e0ef [Mobile] Device
Removes desktop mixin settings
that do not use device width and
height.
2015-07-10 11:40:57 -07:00
Dave
61e1aeb1d8 [Mobile] Device
Removes desktop mixin settings
that do not use device width and
height.
2015-07-10 11:40:14 -07:00
Dave
9caa603a65 [Mobile] Device
Removes desktop mixin settings
that do not use device width and
height.
2015-07-10 11:36:45 -07:00
Dave
5c99e469d5 [Mobile] Device Change
Now instead of min-width, max-width,
... etc, uses the device-width/height.
This allows the devices to use the slide
menu while the browser on a desktop
consistently stays as desktop mode, no
matter if it is resized. As a result of this
the rwd is clear on phones/tablets, but not if
user resizes browser super small.
2015-07-10 11:29:30 -07:00
Dave
4d9dc3624b [Mobile] Items
Item icons disappear now on
tablets and mobile devices.
Adjusted _items.scss to adjust the
icon class display for phones and
tablets.
2015-07-10 11:12:09 -07:00
Dave
d3ae4b729f [Mobile] More consistent
More consistent when moving from
landscape to portrait and
vice-versa on devices. However
still encountering issue with
the browser being resized.
2015-07-10 10:56:48 -07:00
Dave
30bed434fe [Mobile] Moved variables
Moved variables used for amount of
side bar and slide amount into the
mobile/_constants.scss file.
2015-07-10 09:02:46 -07:00
Dave
3e4ae4d38d [Mobile]
Reverted changes to original controller file.
2015-07-09 15:38:53 -07:00
Dave
7414275a85 [Mobile]
Reverted changes to original scss file.
2015-07-09 15:37:03 -07:00
Dave
fcb0033864 [Mobile]
Reverted changes to css file.
2015-07-09 15:32:41 -07:00
Dave
f079471a18 [Mobile]
Reverted changes to scss file.
2015-07-09 15:31:35 -07:00
Dave
1fb1174c0a [Mobile] Clean-Up
Removed unused scss constant
.
2015-07-09 15:19:29 -07:00
Dave
635e1eda69 [Mobile] Clean-Up
Removed unused menu button and
cleaned up treeCl to be treeClass.
2015-07-09 15:14:36 -07:00
Dave
40d53f941f [Mobile] TreeMenuController
Removed the TreeMenuController.js file
and from the bundle. What this achieves
is already done in BrowseController.js
2015-07-09 14:46:36 -07:00
Dave
684a0e88a2 [Mobile] Constants
Added constants to the
mobile one with device
height.
2015-07-09 14:26:02 -07:00
Dave
30a4f15330 [Mobile] Adjusted
Adjusted the _layout.scss to
have a function that makes
something disappear on phone
and tablet.
2015-07-09 14:11:51 -07:00
Dave
dfd08000f1 [Mobile] Adjust
Adjusted the tablet amount
that the slide occurs.
2015-07-09 13:42:07 -07:00
Dave
82c8d26264 [Mobile]
Now does not display
the icon for the slide menu
on desktops.
2015-07-09 11:16:41 -07:00
Dave
bd236e1cb1 [Mobile] Icon
Added menu/hamburger icon.
2015-07-09 11:06:25 -07:00
Dave
e47a36e799 [Mobile] Simplified
treeSlide now uses one line that
sets it to true or false simply
like a switch. So not matter what
it will either slide or not.
2015-07-09 10:55:52 -07:00
Dave
30efec0090 [Mobile] Angular
Replaced document usage with
angular calls that change the ternary
op to flip the slide.
2015-07-09 10:53:03 -07:00
Dave
b9371ea03d [Mobile] Moved Button
Button moved to the Browse.html
and BrowseController handles the
tree slide.
2015-07-09 10:28:45 -07:00
Dave
7974f33781 [Mobile] Phone
Adjusted to differentiate
phones and tablets.
2015-07-08 16:28:40 -07:00
Dave
cdcaedc8dd [Mobile] Added transistions
Transistions added, however still using
document.getElementById.
2015-07-08 15:57:08 -07:00
Dave
07ef4dfe8a [Mobile] Menu Slide
Menu slides, but not transition
css slides out on click. Currently
uses document, which needs to be
replaced with angular version using
 and/or  and/or
ng-class and/or ng-click.
2015-07-08 14:27:59 -07:00
Dave
342be0822f [Mobile] Gen css 2015-07-08 12:17:19 -07:00
Dave
5c56484889 [Mobile] Main scss added
Added the mobile files as imports
to the main scss files that
generate as css files.
2015-07-08 12:14:40 -07:00
Dave
2b4162c0be [Mobile] Reorganize
Reorganized the sass files. To incorporate, new
mobile directory, which holds all the mobile
sass code.
2015-07-08 12:11:48 -07:00
Dave
3704d64560 [Mobile] Push to show current 2015-07-08 11:08:31 -07:00
Dave
24fae72492 [Mobile] Left tree
Attempt to resize left
tree menu when changing device.
Currently does not move the splitter
bar.
2015-07-07 16:46:32 -07:00
Dave
79fb6eabd9 [Mobile] Menu Button
Menu button added to the
bundle and as a file modelled
after the action button.
2015-07-07 16:28:34 -07:00
Dave
1ddb00c8d6 [Mobile] Resize
Resized the height of each
item in grid based on new
tablet/phone widths.
2015-07-07 14:01:57 -07:00
Dave
8a0b77ec5c [Mobile] Folder View
Folder representation now
will be a list.
2015-07-07 13:02:40 -07:00
Shivam Dave
2fc447e16f [Mobile] Comments
Added comments and reverted the
grid back to normal.
2015-07-07 10:15:25 -07:00
Shivam Dave
d828bf59f9 [Mobile] Constants/Etc
Added constants for media queries.
in _constants.scss. Also, now on tablet,
zoom is disabled.
2015-07-07 09:58:22 -07:00
Shivam Dave
d8806f14aa [Mobile] Set viewport
Viewport has been set in
index.html. Then what was
implemented prior to this
(rem-display and browser-manage)
was commented out.
2015-07-07 09:08:16 -07:00
Shivam Dave
0c6a9ca857 [Mobile] Styles
Added new style to set the width
of the tree.
2015-07-06 13:15:38 -07:00
88 changed files with 4932 additions and 1671 deletions

View File

@@ -8,3 +8,7 @@ deployment:
branch: search
heroku:
appname: openmctweb-staging-un
openmctweb-staging-deux:
branch: mobile
heroku:
appname: openmctweb-staging-deux

View File

@@ -23,6 +23,7 @@
<html>
<head lang="en">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<title></title>
<script type="text/javascript"
src="platform/framework/lib/require.js"

View File

@@ -21,7 +21,7 @@
{
"key": "BrowseObjectController",
"implementation": "BrowseObjectController.js",
"depends": [ "$scope", "$location", "$route" ]
"depends": [ "$scope", "$location", "$route", "$window", "agentService" ]
},
{
"key": "CreateMenuController",
@@ -82,6 +82,11 @@
"templateUrl": "templates/menu-arrow.html",
"uses": [ "action" ],
"gestures": [ "menu" ]
},
{
"key": "back-arrow",
"uses": [ "type", "action" ],
"templateUrl": "templates/back-arrow.html"
}
],
"services": [

View File

@@ -0,0 +1,28 @@
<!--
Open MCT Web, Copyright (c) 2014-2015, United States Government
as represented by the Administrator of the National Aeronautics and Space
Administration. All rights reserved.
Open MCT Web is licensed under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0.
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations
under the License.
Open MCT Web includes source code licensed under additional open source
licenses. See the Open Source Licenses file (LICENSES.md) included with
this source code distribution or the Licensing information page available
at runtime from the About dialog for additional information.
-->
<!-- Back Arrow Icon used on mobile-->
<a ng-controller="BrowseController"
class='type-icon icon ui-symbol s-back'
ng-class="checkRoot(); atRoot ? 'hidden' : ''"
ng-click='backArrow()'>{
</a>

View File

@@ -20,23 +20,30 @@
at runtime from the About dialog for additional information.
-->
<span ng-controller="BrowseObjectController">
<div class="object-browse-bar bar abs">
<div class="items-select left abs">
<mct-representation key="'object-header'" mct-object="domainObject">
<div class="object-browse-bar bar l-flex">
<div class="items-select left">
<mct-representation key="'back-arrow'"
class="l-back">
</mct-representation>
<mct-representation key="'object-header'"
mct-object="domainObject">
</mct-representation>
</div>
<div class="btn-bar right abs">
<mct-representation key="'action-group'"
mct-object="domainObject"
parameters="{ category: 'view-control' }">
</mct-representation>
<div class="btn-bar right">
<mct-representation key="'switcher'"
mct-object="domainObject"
ng-model="representation">
</mct-representation>
<!-- Temporarily, on mobile, the action buttons are hidden-->
<mct-representation key="'action-group'"
mct-object="domainObject"
parameters="{ category: 'view-control' }"
class="mobile-hide">
</mct-representation>
</div>
</div>
<div class='object-holder abs vscroll'>
@@ -44,4 +51,5 @@
mct-object="representation.selected.key && domainObject">
</mct-representation>
</div>
</span>

View File

@@ -19,38 +19,73 @@
this source code distribution or the Licensing information page available
at runtime from the About dialog for additional information.
-->
<div content="jquery-wrapper" class="abs holder-all browse-mode">
<div content="jquery-wrapper"
class="abs holder-all browse-mode"
ng-controller="BrowseController">
<mct-include key="'topbar-browse'"></mct-include>
<div class="holder browse-area s-browse-area abs" ng-controller="BrowseController">
<mct-split-pane class='contents abs' anchor='left'>
<div
class='split-pane-component treeview pane left'
>
<mct-representation key="'create-button'" mct-object="navigatedObject">
</mct-representation>
<div class='holder search-holder abs'
ng-class="{active: treeModel.search}">
<mct-representation key="'search'"
mct-object="domainObject"
ng-model="treeModel">
</mct-representation>
</div>
<div class='holder tree-holder abs'
ng-hide="treeModel.search">
<mct-representation key="'tree'"
mct-object="domainObject"
ng-model="treeModel">
</mct-representation>
</div>
<div class="holder browse-area s-browse-area abs browse-wrapper">
<mct-split-pane
class='contents abs'
anchor='left'>
<div class='split-pane-component treeview pane left'
ng-class='{inactive: !paneModel.leftPane, active: paneModel.leftPane}'>
<div class="holder abs l-mobile">
<mct-representation key="'create-button'"
mct-object="navigatedObject"
ng-model="paneModel">
</mct-representation>
<div class='holder search-holder abs'
ng-class="{active: treeModel.search}">
<mct-representation key="'search'"
mct-object="domainObject"
ng-model="treeModel">
</mct-representation>
</div>
<div class='tree-holder abs mobile-tree-holder'
ng-hide="treeModel.search">
<mct-representation key="'tree'"
mct-object="domainObject"
ng-model="treeModel">
</mct-representation>
</div>
</div>
</div>
<mct-splitter></mct-splitter>
<div class='split-pane-component items pane'>
<div class='holder abs' id='content-area'>
<mct-representation mct-object="navigatedObject" key="'browse-object'">
<mct-splitter class="splitter-bar left mobile-hide"
ng-class="{inactive: !paneModel.leftPane}">
</mct-splitter>
<!-- PANE RIGHT-->
<div class='split-pane-component items secondary-split pane right slide'
ng-class='{leftInactive: !paneModel.leftPane, leftActive: paneModel.leftPane}'>
<div class='holder abs l-mobile'
id='content-area'>
<mct-representation mct-object="navigatedObject"
key="'browse-object'"
ng-model="paneModel">
</mct-representation>
</div>
<div class="key-properties ui-symbol icon mobile-menu-icon desktop-hide"
ng-click="paneModel.leftPane = !paneModel.leftPane">m</div>
</div>
</mct-split-pane>
</div>
<mct-include key="'bottombar'"></mct-include>
<mct-include key="'bottombar'">
</mct-include>
</div>

View File

@@ -19,11 +19,11 @@
this source code distribution or the Licensing information page available
at runtime from the About dialog for additional information.
-->
<div class='object-header'>
<span class="label s-label">
<span class='type-icon icon ui-symbol'>{{type.getGlyph()}}</span>
<div class='object-header object-header-mobile'>
<span class='type-icon ui-symbol'>{{type.getGlyph()}}</span>
<!--span class='type-name mobile-important-hide'>{{type.getName()}}</span-->
<span class="l-elem-wrapper l-flex">
<span ng-if="parameters.mode" class='action'>{{parameters.mode}}</span>
<span class='type-name'>{{type.getName()}}</span>
<span class='title-label'>{{model.name}}</span>
<mct-representation key="'menu-arrow'" mct-object='domainObject'></mct-representation>
</span>

View File

@@ -20,8 +20,10 @@
at runtime from the About dialog for additional information.
-->
<div class="menu-element wrapper" ng-controller="ClickAwayController as createController">
<div class="btn btn-menu create-btn major" ng-click="createController.toggle()">
Create
<div class="btn btn-menu create-btn major"
ng-class="{inactivePane: !ngModel.leftPane}"
ng-click="createController.toggle()">
<span>Create</span>
</div>
<div class="menu dropdown super-menu" ng-show="createController.isActive()">
<mct-representation mct-object="domainObject" key="'create-menu'">

View File

@@ -21,31 +21,27 @@
-->
<!-- For selected, add class 'selected' to outer div -->
<div class='item grid-item' ng-click='action.perform("navigate")'>
<div class="contents abs">
<div class='contents abs'>
<div class='top-bar bar abs'>
<div class='left abs'>
<mct-include key="_checkbox"></mct-include>
</div>
<div class='right abs'>
<div class='ui-symbol icon l-icon-alert'></div>
<div class='ui-symbol icon profile' title="Shared">P</div>
</div>
<div class='ui-symbol profile' title='Shared'>&#x4f;</div>
<mct-representation class="desktop-hide" key="'info-button'" mct-object="domainObject"></mct-representation>
</div>
<div class='item-main abs'>
<div class='ui-symbol icon lg item-type'>
{{type.getGlyph()}}
<span
class="ui-symbol icon l-icon-link" title="This object is a link"
class="ui-symbol l-icon-link" title="This object is a link"
ng-show="location.isLink()"
></span>
</div>
<div class='ui-symbol icon abs item-open'>}</div>
<div class='ui-symbol abs item-open'>}</div>
</div>
<div class='bottom-bar bar abs'>
<div class='title'>{{model.name}}</div>
<div class='details'>
<span>{{type.getName()}}</span>
<span ng-show="model.composition !== undefined">
{{model.composition.length}} Items
- {{model.composition.length}} Item<span ng-show="model.composition.length > 1">s</span>
</span>
</div>
</div>

View File

@@ -50,12 +50,12 @@ define(
function updateRoute(domainObject) {
var priorRoute = $route.current,
// Act as if params HADN'T changed to avoid page reload
// Act as if params HADN'T changed to avoid page reload
unlisten;
unlisten = $scope.$on('$locationChangeSuccess', function () {
// Checks path to make sure /browse/ is at front
// if so, change $route.current
// if so, change $route.current
if ($location.path().indexOf("/browse/") === 0) {
$route.current = priorRoute;
}
@@ -65,7 +65,6 @@ define(
// path to new, addressed, path based on
// domainObject
$location.path(urlService.urlForLocation("browse", domainObject));
}
// Callback for updating the in-scope reference to the object
@@ -129,6 +128,76 @@ define(
}
}
// Uses the current navigation to get the
// current ContextCapability, then the
// parent is gotten from that. If the parent
// is not the root, then user is navigated to
// parent
function navigateToParent() {
var context = navigationService.getNavigation().getCapability('context'),
parentContext,
parent,
grandparentId;
// Checks if the current object has a context
if (context) {
// Sets the parent and the parent context
// which is checked
parent = context.getParent();
parentContext = parent.getCapability('context');
if ((parent.getId() !== ROOT_ID) && parentContext) {
// Gets the grandparent id
grandparentId = parentContext.getParent().getId();
// Navigates to the parent
navigateTo(parent);
// Checks after navigation if the user is located at the
// root (grandparent of original selected object, after
// navigation, user is at parent of original object and
// child of grandparent)
if (grandparentId && grandparentId !== ROOT_ID) {
$scope.atRoot = false;
return;
}
// Set at root if no grandparent exists and
// if grandparent is ROOT, after navigation
$scope.atRoot = true;
}
}
}
function checkRoot() {
var context = navigationService.getNavigation().getCapability('context'),
parentContext,
parent,
grandparent;
// Checks if the current object has a context
if (context) {
parent = context.getParent();
parentContext = parent.getCapability('context');
if ((parent.getId() !== ROOT_ID) && parentContext) {
grandparent = parentContext.getParent();
// Checks if the grandparent exists
// if it does not exist (for example in search),
// than do not show the back button
if (grandparent) {
$scope.atRoot = false;
return;
}
}
}
// In any other situation where the context or parent
// context does not exist or the user is at ROOT, than
// hide the back arrow
$scope.atRoot = true;
}
// Load the root object, put it in the scope.
// Also, load its immediate children, and (possibly)
// navigate to one of them, so that navigation state has
@@ -143,6 +212,11 @@ define(
selectedObject: navigationService.getNavigation()
};
// Provide a model for the left pane
$scope.paneModel = {
selectedObject: navigationService.getNavigation()
};
// Listen for changes in navigation state.
navigationService.addListener(setNavigation);
@@ -154,6 +228,15 @@ define(
navigationService.removeListener(setNavigation);
});
// If the user has selected an object (and is portrait
// on a phone), then hide the tree menu
$scope.$on("select-obj", function () {
$scope.paneModel = !$scope.paneModel;
});
$scope.backArrow = navigateToParent;
$scope.checkRoot = checkRoot;
}
return BrowseController;

View File

@@ -32,7 +32,7 @@ define(
* @memberof platform/commonUI/browse
* @constructor
*/
function BrowseObjectController($scope, $location, $route) {
function BrowseObjectController($scope, $location, $route, $window, agentService) {
function setViewForDomainObject(domainObject) {
var locationViewKey = $location.search().view;
@@ -65,6 +65,13 @@ define(
}
}
// If there is a defined opener or user is on mobile
// openned window will start with tree pane closed
$scope.ngModel.leftPane = ($window.opener || agentService.isMobile(navigator.userAgent)) ? false : true;
// The object inspector by default always starts closed
$scope.ngModel.rightPane = false;
$scope.$watch('domainObject', setViewForDomainObject);
$scope.$watch('representation.selected.key', updateQueryParam);
}

View File

@@ -39,6 +39,9 @@ define(
mockUrlService,
mockDomainObject,
mockNextObject,
mockParentContext,
mockParent,
mockGrandparent,
controller;
function mockPromise(value) {
@@ -52,8 +55,9 @@ define(
beforeEach(function () {
mockScope = jasmine.createSpyObj(
"$scope",
[ "$on", "$watch" ]
[ "$on", "$watch", "backArrow" ]
);
mockScope.ngModel = {};
mockRoute = { current: { params: {} } };
mockLocation = jasmine.createSpyObj(
"$location",
@@ -88,6 +92,17 @@ define(
"nextObject",
[ "getId", "getCapability", "getModel", "useCapability" ]
);
mockParentContext = jasmine.createSpyObj('context', ['getParent']);
mockParent = jasmine.createSpyObj(
"domainObject",
[ "getId", "getCapability", "getModel", "useCapability" ]
);
mockGrandparent = jasmine.createSpyObj(
"domainObject",
[ "getId", "getCapability", "getModel", "useCapability" ]
);
mockObjectService.getObjects.andReturn(mockPromise({
ROOT: mockRootObject
@@ -145,13 +160,26 @@ define(
);
expect(mockScope.navigatedObject).toEqual(mockDomainObject);
});
// Mocks the tree slide call that
// lets the html code know if the
// tree menu is open.
it("switches the the paneModel active state", function () {
expect(mockScope.$on).toHaveBeenCalledWith(
"select-obj",
jasmine.any(Function)
);
mockScope.$on.calls[1].args[1]();
});
it("releases its navigation listener when its scope is destroyed", function () {
expect(mockScope.$on).toHaveBeenCalledWith(
"$destroy",
jasmine.any(Function)
);
mockScope.$on.mostRecentCall.args[1]();
mockScope.$on.calls[0].args[1]();
// Should remove the listener it added earlier
expect(mockNavigationService.removeListener).toHaveBeenCalledWith(
mockNavigationService.addListener.mostRecentCall.args[0]
@@ -237,7 +265,117 @@ define(
mockUrlService.urlForLocation(mockMode, mockNextObject)
);
});
it("checks if the user is current navigated to the root", function () {
var mockContext = jasmine.createSpyObj('context', ['getParent']);
mockRoute.current.params.ids = "ROOT/mine";
mockParent.getId.andReturn("ROOT");
mockDomainObject.getCapability.andCallFake(function (c) {
return c === 'context' && mockContext;
});
mockNavigationService.getNavigation.andReturn(mockDomainObject);
mockContext.getParent.andReturn(mockParent);
mockParent.getCapability.andCallFake(function (c) {
return c === 'context' && mockParentContext;
});
mockParentContext.getParent.andReturn(mockGrandparent);
controller = new BrowseController(
mockScope,
mockRoute,
mockLocation,
mockObjectService,
mockNavigationService
);
mockScope.checkRoot();
mockRoute.current.params.ids = "mine/junk";
mockParent.getId.andReturn("mine");
controller = new BrowseController(
mockScope,
mockRoute,
mockLocation,
mockObjectService,
mockNavigationService
);
mockScope.checkRoot();
mockDomainObject.getCapability.andReturn(undefined);
mockNavigationService.getNavigation.andReturn(mockDomainObject);
controller = new BrowseController(
mockScope,
mockRoute,
mockLocation,
mockObjectService,
mockNavigationService
);
mockScope.checkRoot();
});
// Mocks the back arrow call that
// lets the html code know the back
// arrow navigation needs to be done
it("calls the backArrow function", function () {
var mockContext = jasmine.createSpyObj('context', ['getParent']);
mockRoute.current.params.ids = "mine/junk";
mockParent.getId.andReturn("mine");
mockDomainObject.getCapability.andCallFake(function (c) {
return c === 'context' && mockContext;
});
mockNavigationService.getNavigation.andReturn(mockDomainObject);
mockContext.getParent.andReturn(mockParent);
mockParent.getCapability.andCallFake(function (c) {
return c === 'context' && mockParentContext;
});
mockParentContext.getParent.andReturn(mockGrandparent);
controller = new BrowseController(
mockScope,
mockRoute,
mockLocation,
mockObjectService,
mockNavigationService
);
mockScope.backArrow();
mockRoute.current.params.ids = "mine/lessjunk/morejunk";
mockGrandparent.getId.andReturn("mine");
controller = new BrowseController(
mockScope,
mockRoute,
mockLocation,
mockObjectService,
mockNavigationService
);
mockScope.backArrow();
mockRoute.current.params.ids = "ROOT/mine";
mockParent.getId.andReturn("ROOT");
controller = new BrowseController(
mockScope,
mockRoute,
mockLocation,
mockObjectService,
mockNavigationService
);
mockScope.backArrow();
});
});
}
);

View File

@@ -31,6 +31,8 @@ define(
var mockScope,
mockLocation,
mockRoute,
mockWindow,
mockAgentService,
mockUnlisten,
controller;
@@ -48,11 +50,14 @@ define(
"$scope",
[ "$on", "$watch" ]
);
mockScope.ngModel = {};
mockRoute = { current: { params: {} } };
mockWindow = {};
mockLocation = jasmine.createSpyObj(
"$location",
[ "path", "search" ]
);
mockAgentService = jasmine.createSpyObj("agentService", ["isMobile"]);
mockUnlisten = jasmine.createSpy("unlisten");
mockScope.$on.andReturn(mockUnlisten);
@@ -60,7 +65,9 @@ define(
controller = new BrowseObjectController(
mockScope,
mockLocation,
mockRoute
mockRoute,
mockWindow,
mockAgentService
);
});
@@ -97,7 +104,23 @@ define(
expect(mockScope.representation.selected)
.toEqual(testViews[1]);
});
it("sets ngModel properties on initialization", function () {
// Left pane open status depends on how the window was opened
// Case 1: undefined opener
expect(mockWindow.opener).not.toBeDefined();
expect(mockScope.ngModel.leftPane).toBeTruthy();
// Case 2: defined opener
mockWindow.opener = {};
controller = new BrowseObjectController(
mockScope,
mockLocation,
mockRoute,
mockWindow
);
expect(mockScope.ngModel.leftPane).toBeFalsy();
});
});
}
);

View File

@@ -25,7 +25,7 @@
All fields marked <span class="ui-symbol req">*</span> are required.
</div>
</div>
<div class="abs form outline editor">
<div class="abs form editor">
<div class='abs contents l-dialog'>
<mct-form ng-model="ngModel.value"
structure="ngModel.structure"

View File

@@ -25,7 +25,7 @@
<a href=""
ng-click="ngModel.cancel()"
ng-if="ngModel.cancel"
class="btn normal ui-symbol close">
class="clk-icon icon ui-symbol close">
x
</a>
<div class="abs contents" ng-transclude>

View File

@@ -93,7 +93,7 @@ define(
var traverseObject = (navigationService).getNavigation();
// Stop when object is not defined (above ROOT)
while (traverseObject) {
while (traverseObject && traverseObject.getCapability('context')) {
// If object currently traversed to is object being removed
// navigate to parent of current object and then exit loop

View File

@@ -8,6 +8,10 @@
"key": "urlService",
"implementation": "/services/UrlService.js",
"depends": [ "$location" ]
},
{
"key": "agentService",
"implementation": "/services/AgentService.js"
}
],
"runs": [
@@ -60,7 +64,7 @@
{
"key": "TreeNodeController",
"implementation": "controllers/TreeNodeController.js",
"depends": [ "$scope", "$timeout" ]
"depends": [ "$scope", "$timeout", "agentService" ]
},
{
"key": "ActionGroupController",
@@ -104,6 +108,11 @@
"key": "SelectorController",
"implementation": "controllers/SelectorController.js",
"depends": [ "objectService", "$scope" ]
},
{
"key": "ObjectInspectorController",
"implementation": "controllers/ObjectInspectorController.js",
"depends": [ "$scope", "objectService" ]
}
],
"directives": [
@@ -219,6 +228,10 @@
"key": "switcher",
"templateUrl": "templates/controls/switcher.html",
"uses": [ "view" ]
},
{
"key": "object-inspector",
"templateUrl": "templates/object-inspector.html"
}
],
"controls": [

View File

@@ -48,6 +48,34 @@
/************************** CONTROLS */
/************************** PATHS */
/************************** TIMINGS */
/*****************************************************************************
* Open MCT Web, Copyright (c) 2014-2015, United States Government
* as represented by the Administrator of the National Aeronautics and Space
* Administration. All rights reserved.
*
* Open MCT Web is licensed under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
* Open MCT Web includes source code licensed under additional open source
* licenses. See the Open Source Licenses file (LICENSES.md) included with
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
/************************** STYLE */
/************************** MOBILE REPRESENTATION ITEMS DIMENSIONS */
/************************** MOBILE TREE MENU DIMENSIONS */
/************************** WINDOW DIMENSIONS FOR RWD */
/************************** MEDIA QUERIES: WINDOW CHECKS FOR SPECIFIC ORIENTATIONS FOR EACH DEVICE */
/************************** MEDIA QUERIES: WINDOWS FOR SPECIFIC ORIENTATIONS FOR EACH DEVICE */
/************************** DEVICE PARAMETERS FOR MENUS/REPRESENTATIONS */
/*****************************************************************************
* Open MCT Web, Copyright (c) 2014-2015, United States Government
* as represented by the Administrator of the National Aeronautics and Space
@@ -121,83 +149,103 @@
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
/*****************************************************************************
* Open MCT Web, Copyright (c) 2014-2015, United States Government
* as represented by the Administrator of the National Aeronautics and Space
* Administration. All rights reserved.
*
* Open MCT Web is licensed under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
* Open MCT Web includes source code licensed under additional open source
* licenses. See the Open Source Licenses file (LICENSES.md) included with
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
/* line 22, ../sass/forms/_elems.scss */
.section-header {
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
border-radius: 2px;
background: rgba(255, 255, 255, 0.1);
color: #cccccc;
font-size: 0.8em;
margin-top: 5px;
padding: 5px; }
/* line 28, ../sass/forms/_elems.scss */
.section-header:first-child {
margin-top: 0; }
padding: 5px 5px;
text-transform: uppercase; }
/* line 35, ../sass/forms/_elems.scss */
.form .form-section {
position: relative; }
/* line 39, ../sass/forms/_elems.scss */
position: relative;
margin-bottom: 20px; }
/* line 40, ../sass/forms/_elems.scss */
.form .form-row {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
overflow: hidden;
*zoom: 1;
border-top: 1px solid #4d4d4d;
border-top: 1px solid rgba(255, 255, 255, 0.1);
margin-top: 5px;
padding: 5px;
padding: 5px 0;
position: relative; }
/* line 46, ../sass/forms/_elems.scss */
/* line 48, ../sass/forms/_elems.scss */
.form .form-row.first {
border-top: none; }
/* line 50, ../sass/forms/_elems.scss */
.form .form-row .label,
.form .form-row .controls {
/* line 52, ../sass/forms/_elems.scss */
.form .form-row > .label,
.form .form-row > .controls {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
overflow: hidden;
*zoom: 1;
box-sizing: border-box;
font-size: 0.75rem;
font-size: 0.8rem;
line-height: 22px;
min-height: 22px; }
/* line 61, ../sass/forms/_elems.scss */
.form .form-row > .label {
float: left;
min-width: 120px;
position: relative;
white-space: nowrap;
width: 20%; }
/* line 69, ../sass/forms/_elems.scss */
width: 30%; }
/* line 71, ../sass/forms/_elems.scss */
.form .form-row .value {
color: #cccccc; }
/* line 73, ../sass/forms/_elems.scss */
/* line 75, ../sass/forms/_elems.scss */
.form .form-row .controls {
float: left;
position: relative;
width: 79.9%; }
/* line 80, ../sass/forms/_elems.scss */
width: 69.9%; }
/* line 82, ../sass/forms/_elems.scss */
.form .form-row .controls .l-composite-control.l-checkbox {
display: inline-block;
line-height: 14px;
margin-right: 5px; }
/* line 89, ../sass/forms/_elems.scss */
/* line 91, ../sass/forms/_elems.scss */
.form .form-row .controls .l-med input[type="text"] {
width: 200px; }
/* line 93, ../sass/forms/_elems.scss */
/* line 95, ../sass/forms/_elems.scss */
.form .form-row .controls .l-small input[type="text"] {
width: 50px; }
/* line 97, ../sass/forms/_elems.scss */
/* line 99, ../sass/forms/_elems.scss */
.form .form-row .controls .l-numeric input[type="text"] {
text-align: right; }
/* line 101, ../sass/forms/_elems.scss */
/* line 103, ../sass/forms/_elems.scss */
.form .form-row .controls .select {
margin-right: 5px; }
/* line 106, ../sass/forms/_elems.scss */
/* line 108, ../sass/forms/_elems.scss */
.form .form-row .field-hints {
color: #666666; }
/* line 110, ../sass/forms/_elems.scss */
/* line 112, ../sass/forms/_elems.scss */
.form .form-row .selector-list {
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
@@ -210,7 +258,7 @@
position: relative;
height: 150px;
overflow: auto; }
/* line 121, ../sass/forms/_elems.scss */
/* line 123, ../sass/forms/_elems.scss */
.form .form-row .selector-list .wrapper {
overflow-y: auto;
position: absolute;
@@ -219,24 +267,24 @@
bottom: 5px;
left: 5px; }
/* line 135, ../sass/forms/_elems.scss */
/* line 137, ../sass/forms/_elems.scss */
label.form-control.checkbox input {
margin-right: 5px;
vertical-align: top; }
/* line 141, ../sass/forms/_elems.scss */
/* line 143, ../sass/forms/_elems.scss */
.hint,
.s-hint {
font-size: 0.9em; }
/* line 146, ../sass/forms/_elems.scss */
/* line 148, ../sass/forms/_elems.scss */
.l-result {
display: inline-block;
min-width: 32px;
min-height: 32px;
position: relative;
vertical-align: top; }
/* line 153, ../sass/forms/_elems.scss */
/* line 155, ../sass/forms/_elems.scss */
.l-result div.s-hint {
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
@@ -385,7 +433,7 @@ input[type="text"] {
margin: 0 0 2px 2px;
overflow: hidden;
position: relative; }
/* line 162, ../sass/_mixins.scss */
/* line 167, ../sass/_mixins.scss */
.form-control.select:not(.disabled):hover {
background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzYzNjM2MyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzU3NTc1NyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');
background-size: 100%;
@@ -394,10 +442,10 @@ input[type="text"] {
background-image: -webkit-linear-gradient(#636363, #575757);
background-image: linear-gradient(#636363, #575757);
color: #bdbdbd; }
/* line 165, ../sass/_mixins.scss */
/* line 170, ../sass/_mixins.scss */
.form-control.select:not(.disabled):hover.btn-menu .invoke-menu {
color: #878787; }
/* line 170, ../sass/_mixins.scss */
/* line 175, ../sass/_mixins.scss */
.form-control.select.btn-menu .invoke-menu {
color: #757575; }
/* line 29, ../sass/forms/_selects.scss */

View File

@@ -48,6 +48,34 @@
/************************** CONTROLS */
/************************** PATHS */
/************************** TIMINGS */
/*****************************************************************************
* Open MCT Web, Copyright (c) 2014-2015, United States Government
* as represented by the Administrator of the National Aeronautics and Space
* Administration. All rights reserved.
*
* Open MCT Web is licensed under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
* Open MCT Web includes source code licensed under additional open source
* licenses. See the Open Source Licenses file (LICENSES.md) included with
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
/************************** STYLE */
/************************** MOBILE REPRESENTATION ITEMS DIMENSIONS */
/************************** MOBILE TREE MENU DIMENSIONS */
/************************** WINDOW DIMENSIONS FOR RWD */
/************************** MEDIA QUERIES: WINDOW CHECKS FOR SPECIFIC ORIENTATIONS FOR EACH DEVICE */
/************************** MEDIA QUERIES: WINDOWS FOR SPECIFIC ORIENTATIONS FOR EACH DEVICE */
/************************** DEVICE PARAMETERS FOR MENUS/REPRESENTATIONS */
/*****************************************************************************
* Open MCT Web, Copyright (c) 2014-2015, United States Government
* as represented by the Administrator of the National Aeronautics and Space
@@ -79,6 +107,27 @@
}
}
*/
/*****************************************************************************
* Open MCT Web, Copyright (c) 2014-2015, United States Government
* as represented by the Administrator of the National Aeronautics and Space
* Administration. All rights reserved.
*
* Open MCT Web is licensed under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
* Open MCT Web includes source code licensed under additional open source
* licenses. See the Open Source Licenses file (LICENSES.md) included with
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
/*****************************************************************************
* Open MCT Web, Copyright (c) 2014-2015, United States Government
* as represented by the Administrator of the National Aeronautics and Space
@@ -137,7 +186,7 @@
margin-bottom: 3px;
margin-right: 3px;
position: relative; }
/* line 162, ../sass/_mixins.scss */
/* line 167, ../sass/_mixins.scss */
.items-holder .item.grid-item:not(.disabled):hover {
background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzcwNzA3MCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzYzNjM2MyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');
background-size: 100%;
@@ -146,15 +195,15 @@
background-image: -webkit-linear-gradient(#707070, #636363);
background-image: linear-gradient(#707070, #636363);
color: #bdbdbd; }
/* line 165, ../sass/_mixins.scss */
/* line 170, ../sass/_mixins.scss */
.items-holder .item.grid-item:not(.disabled):hover.btn-menu .invoke-menu {
color: #949494; }
/* line 170, ../sass/_mixins.scss */
/* line 175, ../sass/_mixins.scss */
.items-holder .item.grid-item.btn-menu .invoke-menu {
color: #828282; }
/* line 46, ../sass/items/_item.scss */
.items-holder .item.grid-item:hover .item-main .item-type {
color: #0099cc !important; }
color: deepskyblue !important; }
/* line 48, ../sass/items/_item.scss */
.items-holder .item.grid-item:hover .item-main .item-type .l-icon-link {
color: #49dedb; }
@@ -163,35 +212,35 @@
opacity: 1; }
/* line 57, ../sass/items/_item.scss */
.items-holder .item.grid-item .contents {
top: 5px;
right: 5px;
bottom: 5px;
left: 5px; }
/* line 61, ../sass/items/_item.scss */
.items-holder .item.grid-item .bar.top-bar.abs {
top: 10px;
right: 10px;
bottom: 10px;
left: 10px; }
/* line 63, ../sass/items/_item.scss */
.items-holder .item.grid-item .bar.top-bar {
bottom: auto;
height: 20px;
line-height: 20px;
text-align: right;
z-index: 5; }
/* line 66, ../sass/items/_item.scss */
.items-holder .item.grid-item .bar.top-bar.abs .left, .items-holder .item.grid-item .bar.top-bar.abs .right {
/* line 69, ../sass/items/_item.scss */
.items-holder .item.grid-item .bar.top-bar .left, .items-holder .item.grid-item .bar.top-bar .right {
width: auto; }
/* line 68, ../sass/items/_item.scss */
.items-holder .item.grid-item .bar.top-bar.abs .left .icon, .items-holder .item.grid-item .bar.top-bar.abs .right .icon {
/* line 71, ../sass/items/_item.scss */
.items-holder .item.grid-item .bar.top-bar .left .icon, .items-holder .item.grid-item .bar.top-bar .right .icon {
margin-left: 3px; }
/* line 70, ../sass/items/_item.scss */
.items-holder .item.grid-item .bar.top-bar.abs .left .icon.l-icon-link, .items-holder .item.grid-item .bar.top-bar.abs .right .icon.l-icon-link {
/* line 73, ../sass/items/_item.scss */
.items-holder .item.grid-item .bar.top-bar .left .icon.l-icon-link, .items-holder .item.grid-item .bar.top-bar .right .icon.l-icon-link {
color: #49dedb; }
/* line 76, ../sass/items/_item.scss */
.items-holder .item.grid-item .bar.bottom-bar.abs {
/* line 79, ../sass/items/_item.scss */
.items-holder .item.grid-item .bar.bottom-bar {
top: auto;
height: 30px;
padding: 5px; }
/* line 82, ../sass/items/_item.scss */
line-height: 110%; }
/* line 85, ../sass/items/_item.scss */
.items-holder .item.grid-item .item-main {
line-height: 160px;
z-index: 1; }
/* line 88, ../sass/items/_item.scss */
/* line 91, ../sass/items/_item.scss */
.items-holder .item.grid-item .item-main .item-type {
overflow: false;
position: absolute;
@@ -201,24 +250,23 @@
left: 40px;
width: auto;
height: auto;
color: #737373;
text-align: center;
font-size: 96.9px;
line-height: 102px;
bottom: auto;
height: 102px;
top: 30px; }
/* line 100, ../sass/items/_item.scss */
/* line 103, ../sass/items/_item.scss */
.items-holder .item.grid-item .item-main .item-type .l-icon-link {
color: #1a8e8b;
height: 36px;
line-height: 36px;
color: #49dedb;
height: auto;
line-height: 100%;
position: absolute;
font-size: 32px;
font-size: 0.3em;
left: 0px;
bottom: 10px;
z-index: 2; }
/* line 112, ../sass/items/_item.scss */
/* line 116, ../sass/items/_item.scss */
.items-holder .item.grid-item .item-main .item-open {
-moz-transition-property: "opacity";
-o-transition-property: "opacity";
@@ -238,17 +286,20 @@
width: 50px;
pointer-events: none;
text-align: right; }
/* line 124, ../sass/items/_item.scss */
/* line 128, ../sass/items/_item.scss */
.items-holder .item.grid-item .title {
text-shadow: rgba(0, 0, 0, 0.1) 0 1px 2px;
color: #cccccc;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
text-overflow: ellipsis; }
/* line 132, ../sass/items/_item.scss */
color: #cccccc; }
/* line 133, ../sass/items/_item.scss */
.items-holder .item.grid-item .details {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-size: 0.8em; }
/* line 135, ../sass/items/_item.scss */
/* line 137, ../sass/items/_item.scss */
.items-holder .item.grid-item.selected {
background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzBhYzJmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzAwYjRmMCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');
background-size: 100%;
@@ -270,7 +321,7 @@
color: #999;
display: inline-block;
color: #80dfff; }
/* line 162, ../sass/_mixins.scss */
/* line 167, ../sass/_mixins.scss */
.items-holder .item.grid-item.selected:not(.disabled):hover {
background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzJlY2JmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzE0YzRmZiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA==');
background-size: 100%;
@@ -279,21 +330,123 @@
background-image: -webkit-linear-gradient(#2ecbff, #14c4ff);
background-image: linear-gradient(#2ecbff, #14c4ff);
color: #bdbdbd; }
/* line 165, ../sass/_mixins.scss */
/* line 170, ../sass/_mixins.scss */
.items-holder .item.grid-item.selected:not(.disabled):hover.btn-menu .invoke-menu {
color: #75ddff; }
/* line 170, ../sass/_mixins.scss */
/* line 175, ../sass/_mixins.scss */
.items-holder .item.grid-item.selected.btn-menu .invoke-menu {
color: #52d4ff; }
/* line 140, ../sass/items/_item.scss */
/* line 142, ../sass/items/_item.scss */
.items-holder .item.grid-item.selected .item-type, .items-holder .item.grid-item.selected .top-bar .icon:not(.alert) {
color: #80dfff; }
/* line 141, ../sass/items/_item.scss */
/* line 143, ../sass/items/_item.scss */
.items-holder .item.grid-item.selected .item-main .item-open {
color: #80dfff; }
/* line 142, ../sass/items/_item.scss */
/* line 144, ../sass/items/_item.scss */
.items-holder .item.grid-item.selected .title {
color: white; }
/* line 144, ../sass/items/_item.scss */
/* line 146, ../sass/items/_item.scss */
.items-holder .item.grid-item.selected:hover .item-main .item-type {
color: white !important; }
/*****************************************************************************
* Open MCT Web, Copyright (c) 2014-2015, United States Government
* as represented by the Administrator of the National Aeronautics and Space
* Administration. All rights reserved.
*
* Open MCT Web is licensed under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
* Open MCT Web includes source code licensed under additional open source
* licenses. See the Open Source Licenses file (LICENSES.md) included with
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
@media screen and (orientation: portrait) and (max-width: 514px) and (max-height: 740px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (max-height: 514px) and (max-width: 740px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (max-height: 514px) and (max-width: 740px) and (max-device-width: 1024px) and (max-device-height: 799px), screen and (orientation: portrait) and (min-width: 515px) and (max-width: 799px) and (min-height: 741px) and (max-height: 1024px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (min-height: 515px) and (max-height: 799px) and (min-width: 741px) and (max-width: 1024px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (min-height: 515px) and (max-height: 799px) and (min-width: 741px) and (max-width: 1024px) and (max-device-width: 1024px) and (max-device-height: 799px) {
/* line 29, ../sass/mobile/_item.scss */
.items-holder .item.grid-item {
width: 100%; }
/* line 33, ../sass/mobile/_item.scss */
.items-holder .item.grid-item > .contents {
top: 0px;
right: 10px;
bottom: 0px;
left: 10px; }
/* line 37, ../sass/mobile/_item.scss */
.items-holder .item.grid-item .bar.top-bar {
bottom: 0 !important;
left: auto !important;
right: 20px !important;
width: 40px !important;
height: auto !important;
text-align: right; }
/* line 44, ../sass/mobile/_item.scss */
.items-holder .item.grid-item .bar.bottom-bar {
left: 40px;
right: 60px; }
/* line 52, ../sass/mobile/_item.scss */
.items-holder .item.grid-item .item-main .item-type {
font-size: 30px;
right: auto;
bottom: auto;
left: 0;
line-height: 100%;
text-align: left;
width: 30px; }
/* line 61, ../sass/mobile/_item.scss */
.items-holder .item.grid-item .item-main .item-type .l-icon-link {
bottom: 0; }
/* line 65, ../sass/mobile/_item.scss */
.items-holder .item.grid-item .item-main .item-open {
display: block;
opacity: 1;
font-size: 1em;
width: auto; } }
@media screen and (orientation: portrait) and (max-width: 514px) and (max-height: 740px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (max-height: 514px) and (max-width: 740px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (max-height: 514px) and (max-width: 740px) and (max-device-width: 1024px) and (max-device-height: 799px) {
/* line 29, ../sass/mobile/_item.scss */
.items-holder .item.grid-item {
height: 50px; }
/* line 78, ../sass/mobile/_item.scss */
.items-holder .item.grid-item .bar.top-bar {
line-height: 50px !important; }
/* line 82, ../sass/mobile/_item.scss */
.items-holder .item.grid-item .bar.bottom-bar {
top: 7px;
bottom: auto;
height: 35px; }
/* line 87, ../sass/mobile/_item.scss */
.items-holder .item.grid-item .item-main .item-type {
top: 10px;
bottom: auto;
height: 30px; }
/* line 90, ../sass/mobile/_item.scss */
.items-holder .item.grid-item .item-main .item-open {
line-height: 50px; } }
@media screen and (orientation: portrait) and (min-width: 515px) and (max-width: 799px) and (min-height: 741px) and (max-height: 1024px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (min-height: 515px) and (max-height: 799px) and (min-width: 741px) and (max-width: 1024px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (min-height: 515px) and (max-height: 799px) and (min-width: 741px) and (max-width: 1024px) and (max-device-width: 1024px) and (max-device-height: 799px) {
/* line 29, ../sass/mobile/_item.scss */
.items-holder .item.grid-item {
height: 66px; }
/* line 100, ../sass/mobile/_item.scss */
.items-holder .item.grid-item .bar.top-bar {
line-height: 66px !important; }
/* line 104, ../sass/mobile/_item.scss */
.items-holder .item.grid-item .bar.bottom-bar {
top: 15px;
bottom: auto;
height: 35px; }
/* line 109, ../sass/mobile/_item.scss */
.items-holder .item.grid-item .item-main .item-type {
top: 18px;
bottom: auto;
height: 30px; }
/* line 112, ../sass/mobile/_item.scss */
.items-holder .item.grid-item .item-main .item-open {
line-height: 66px; } }

File diff suppressed because it is too large Load Diff

View File

@@ -48,6 +48,34 @@
/************************** CONTROLS */
/************************** PATHS */
/************************** TIMINGS */
/*****************************************************************************
* Open MCT Web, Copyright (c) 2014-2015, United States Government
* as represented by the Administrator of the National Aeronautics and Space
* Administration. All rights reserved.
*
* Open MCT Web is licensed under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
* Open MCT Web includes source code licensed under additional open source
* licenses. See the Open Source Licenses file (LICENSES.md) included with
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
/************************** STYLE */
/************************** MOBILE REPRESENTATION ITEMS DIMENSIONS */
/************************** MOBILE TREE MENU DIMENSIONS */
/************************** WINDOW DIMENSIONS FOR RWD */
/************************** MEDIA QUERIES: WINDOW CHECKS FOR SPECIFIC ORIENTATIONS FOR EACH DEVICE */
/************************** MEDIA QUERIES: WINDOWS FOR SPECIFIC ORIENTATIONS FOR EACH DEVICE */
/************************** DEVICE PARAMETERS FOR MENUS/REPRESENTATIONS */
/*****************************************************************************
* Open MCT Web, Copyright (c) 2014-2015, United States Government
* as represented by the Administrator of the National Aeronautics and Space
@@ -79,6 +107,27 @@
}
}
*/
/*****************************************************************************
* Open MCT Web, Copyright (c) 2014-2015, United States Government
* as represented by the Administrator of the National Aeronautics and Space
* Administration. All rights reserved.
*
* Open MCT Web is licensed under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
* Open MCT Web includes source code licensed under additional open source
* licenses. See the Open Source Licenses file (LICENSES.md) included with
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
/*****************************************************************************
* Open MCT Web, Copyright (c) 2014-2015, United States Government
* as represented by the Administrator of the National Aeronautics and Space
@@ -104,7 +153,7 @@
ul.tree {
margin: 0;
padding: 0; }
/* line 308, ../sass/_mixins.scss */
/* line 314, ../sass/_mixins.scss */
ul.tree li {
list-style-type: none;
margin: 0;
@@ -113,144 +162,175 @@ ul.tree {
ul.tree li {
display: block;
position: relative; }
/* line 28, ../sass/tree/_tree.scss */
ul.tree li span.tree-item {
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
border-radius: 2px;
-moz-transition: background-color 0.25s;
-o-transition: background-color 0.25s;
-webkit-transition: background-color 0.25s;
transition: background-color 0.25s;
display: block;
font-size: 0.8em;
height: 1.5rem;
line-height: 1.5rem;
margin-bottom: 3px;
position: relative; }
/* line 39, ../sass/tree/_tree.scss */
ul.tree li span.tree-item .view-control {
display: inline-block;
margin-left: 5px;
font-size: 0.75em;
width: 10px; }
/* line 45, ../sass/tree/_tree.scss */
ul.tree li span.tree-item .view-control:hover {
color: #ffc700; }
/* line 50, ../sass/tree/_tree.scss */
ul.tree li span.tree-item .label {
display: block;
overflow: hidden;
position: absolute;
top: 0px;
right: 0px;
bottom: 0px;
left: 0px;
width: auto;
height: auto;
left: 15px; }
/* line 57, ../sass/tree/_tree.scss */
ul.tree li span.tree-item .label .type-icon {
overflow: false;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
width: auto;
height: auto;
text-shadow: rgba(0, 0, 0, 0.6) 0 1px 2px;
color: #0099cc;
left: 5px;
right: auto;
width: 1em; }
/* line 65, ../sass/tree/_tree.scss */
ul.tree li span.tree-item .label .type-icon .icon.l-icon-link, ul.tree li span.tree-item .label .type-icon .icon.l-icon-alert {
text-shadow: black 0 1px 2px;
position: absolute;
z-index: 2; }
/* line 71, ../sass/tree/_tree.scss */
ul.tree li span.tree-item .label .type-icon .icon.l-icon-alert {
color: #ff3c00;
font-size: 8px;
line-height: 8px;
height: 8px;
width: 8px;
top: 1px;
right: -2px; }
/* line 77, ../sass/tree/_tree.scss */
ul.tree li span.tree-item .label .type-icon .icon.l-icon-link {
color: #49dedb;
font-size: 8px;
line-height: 8px;
height: 8px;
width: 8px;
left: -3px;
bottom: 5px; }
/* line 86, ../sass/tree/_tree.scss */
ul.tree li span.tree-item .label .title-label {
overflow: hidden;
position: absolute;
top: 0px;
right: 0px;
bottom: 0px;
left: 0px;
width: auto;
height: auto;
display: block;
left: 30px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap; }
/* line 97, ../sass/tree/_tree.scss */
ul.tree li span.tree-item.loading {
pointer-events: none; }
/* line 99, ../sass/tree/_tree.scss */
ul.tree li span.tree-item.loading .label {
opacity: 0.5; }
/* line 101, ../sass/tree/_tree.scss */
ul.tree li span.tree-item.loading .label .title-label {
font-style: italic; }
/* line 105, ../sass/tree/_tree.scss */
ul.tree li span.tree-item.loading .wait-spinner {
margin-left: 14px; }
/* line 110, ../sass/tree/_tree.scss */
ul.tree li span.tree-item.selected {
background: #005177;
color: #fff; }
/* line 114, ../sass/tree/_tree.scss */
ul.tree li span.tree-item.selected .view-control {
color: #0099cc; }
/* line 117, ../sass/tree/_tree.scss */
ul.tree li span.tree-item.selected .label .type-icon {
color: #fff; }
/* line 123, ../sass/tree/_tree.scss */
ul.tree li span.tree-item:not(.selected):hover {
background: #404040;
color: #cccccc; }
/* line 126, ../sass/tree/_tree.scss */
ul.tree li span.tree-item:not(.selected):hover .context-trigger {
display: block; }
/* line 129, ../sass/tree/_tree.scss */
ul.tree li span.tree-item:not(.selected):hover .icon {
color: #33ccff; }
/* line 135, ../sass/tree/_tree.scss */
ul.tree li span.tree-item:not(.loading) {
cursor: pointer; }
/* line 139, ../sass/tree/_tree.scss */
ul.tree li span.tree-item .context-trigger {
top: -1px;
position: absolute;
right: 3px; }
/* line 145, ../sass/tree/_tree.scss */
ul.tree li span.tree-item .context-trigger .invoke-menu {
font-size: 0.75em;
height: 0.9rem;
line-height: 0.9rem; }
/* line 154, ../sass/tree/_tree.scss */
/* line 29, ../sass/tree/_tree.scss */
ul.tree ul.tree {
margin-left: 15px; }
/* line 34, ../sass/tree/_tree.scss */
.tree-item,
.search-result-item {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
border-radius: 2px;
-moz-transition: background-color 0.25s;
-o-transition: background-color 0.25s;
-webkit-transition: background-color 0.25s;
transition: background-color 0.25s;
display: block;
font-size: 0.8rem;
height: 1.5rem;
line-height: 1.5rem;
margin-bottom: 3px;
position: relative; }
/* line 47, ../sass/tree/_tree.scss */
.tree-item .view-control,
.search-result-item .view-control {
display: inline-block;
margin-left: 5px;
font-size: 0.75em;
width: 10px; }
@media screen and (min-device-width: 800px) and (min-device-height: 1025px), screen and (min-device-width: 1025px) and (min-device-height: 800px) {
/* line 55, ../sass/tree/_tree.scss */
.tree-item .view-control:hover,
.search-result-item .view-control:hover {
color: #ffc700; } }
/* line 61, ../sass/tree/_tree.scss */
.tree-item .label,
.search-result-item .label {
display: block;
overflow: hidden;
position: absolute;
top: 0px;
right: 0px;
bottom: 0px;
left: 0px;
width: auto;
height: auto;
line-height: 1.5rem; }
/* line 69, ../sass/tree/_tree.scss */
.tree-item .label .type-icon,
.search-result-item .label .type-icon {
text-shadow: rgba(0, 0, 0, 0.6) 0 1px 2px;
font-size: 16px;
color: #0099cc;
left: 5px;
position: absolute;
top: 4px;
bottom: auto;
height: 16px;
line-height: 100%;
right: auto;
width: 16px; }
/* line 82, ../sass/tree/_tree.scss */
.tree-item .label .type-icon .icon.l-icon-link, .tree-item .label .type-icon .icon.l-icon-alert,
.search-result-item .label .type-icon .icon.l-icon-link,
.search-result-item .label .type-icon .icon.l-icon-alert {
text-shadow: black 0 1px 2px;
position: absolute;
z-index: 2; }
/* line 88, ../sass/tree/_tree.scss */
.tree-item .label .type-icon .icon.l-icon-alert,
.search-result-item .label .type-icon .icon.l-icon-alert {
color: #ff3c00;
font-size: 8px;
line-height: 8px;
height: 8px;
width: 8px;
top: 1px;
right: -2px; }
/* line 94, ../sass/tree/_tree.scss */
.tree-item .label .type-icon .icon.l-icon-link,
.search-result-item .label .type-icon .icon.l-icon-link {
color: #49dedb;
font-size: 8px;
line-height: 8px;
height: 8px;
width: 8px;
left: -3px;
bottom: 0px; }
/* line 102, ../sass/tree/_tree.scss */
.tree-item .label .title-label,
.search-result-item .label .title-label {
overflow: hidden;
position: absolute;
top: 0px;
right: 0px;
bottom: 0px;
left: 0px;
width: auto;
height: auto;
display: block;
left: 30px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap; }
/* line 113, ../sass/tree/_tree.scss */
.tree-item.loading,
.search-result-item.loading {
pointer-events: none; }
/* line 115, ../sass/tree/_tree.scss */
.tree-item.loading .label,
.search-result-item.loading .label {
opacity: 0.5; }
/* line 117, ../sass/tree/_tree.scss */
.tree-item.loading .label .title-label,
.search-result-item.loading .label .title-label {
font-style: italic; }
/* line 121, ../sass/tree/_tree.scss */
.tree-item.loading .wait-spinner,
.search-result-item.loading .wait-spinner {
margin-left: 14px; }
/* line 126, ../sass/tree/_tree.scss */
.tree-item.selected,
.search-result-item.selected {
background: #005177;
color: #fff; }
/* line 130, ../sass/tree/_tree.scss */
.tree-item.selected .view-control,
.search-result-item.selected .view-control {
color: #0099cc; }
/* line 133, ../sass/tree/_tree.scss */
.tree-item.selected .label .type-icon,
.search-result-item.selected .label .type-icon {
color: #fff; }
@media screen and (min-device-width: 800px) and (min-device-height: 1025px), screen and (min-device-width: 1025px) and (min-device-height: 800px) {
/* line 141, ../sass/tree/_tree.scss */
.tree-item:not(.selected):hover,
.search-result-item:not(.selected):hover {
background: rgba(255, 255, 255, 0.1);
color: #cccccc; }
/* line 144, ../sass/tree/_tree.scss */
.tree-item:not(.selected):hover .context-trigger,
.search-result-item:not(.selected):hover .context-trigger {
display: block; }
/* line 147, ../sass/tree/_tree.scss */
.tree-item:not(.selected):hover .icon,
.search-result-item:not(.selected):hover .icon {
color: #33ccff; } }
/* line 154, ../sass/tree/_tree.scss */
.tree-item:not(.loading),
.search-result-item:not(.loading) {
cursor: pointer; }
/* line 158, ../sass/tree/_tree.scss */
.tree-item .context-trigger,
.search-result-item .context-trigger {
top: -1px;
position: absolute;
right: 3px; }
/* line 164, ../sass/tree/_tree.scss */
.tree-item .context-trigger .invoke-menu,
.search-result-item .context-trigger .invoke-menu {
font-size: 0.75em;
height: 0.9rem;
line-height: 0.9rem; }
/* line 173, ../sass/tree/_tree.scss */
.tree-item .label {
left: 15px; }
/*****************************************************************************
* Open MCT Web, Copyright (c) 2014-2015, United States Government
* as represented by the Administrator of the National Aeronautics and Space
@@ -272,227 +352,34 @@ ul.tree {
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
/* line 23, ../sass/search/_search.scss */
.abs.search-holder {
height: 25px;
bottom: 0;
z-index: 5; }
/* line 27, ../sass/search/_search.scss */
.abs.search-holder.active {
height: auto;
bottom: 0; }
@media screen and (orientation: portrait) and (max-width: 514px) and (max-height: 740px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (max-height: 514px) and (max-width: 740px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (max-height: 514px) and (max-width: 740px) and (max-device-width: 1024px) and (max-device-height: 799px), screen and (orientation: portrait) and (min-width: 515px) and (max-width: 799px) and (min-height: 741px) and (max-height: 1024px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (min-height: 515px) and (max-height: 799px) and (min-width: 741px) and (max-width: 1024px) and (max-device-width: 799px) and (max-device-height: 1024px), screen and (orientation: landscape) and (min-height: 515px) and (max-height: 799px) and (min-width: 741px) and (max-width: 1024px) and (max-device-width: 1024px) and (max-device-height: 799px) {
/* line 27, ../sass/mobile/_tree.scss */
ul.tree ul.tree {
margin-left: 20px; }
/* line 38, ../sass/search/_search.scss */
.search {
display: flex;
flex-direction: column;
height: 100%; }
/* line 49, ../sass/search/_search.scss */
.search .search-bar {
font-size: 0.8em;
position: relative;
width: 100%; }
/* line 66, ../sass/search/_search.scss */
.search .search-bar .search-input {
height: 25px;
line-height: 25px;
padding-top: 0;
padding-bottom: 0; }
/* line 73, ../sass/search/_search.scss */
.search .search-bar .search-icon,
.search .search-bar .clear-icon,
.search .search-bar .menu-icon {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
color: #737373;
height: 17px;
width: 17px;
line-height: 17px;
/* line 31, ../sass/mobile/_tree.scss */
.tree-item,
.search-result-item {
height: 35px;
line-height: 35px;
margin-bottom: 0px; }
/* line 36, ../sass/mobile/_tree.scss */
.tree-item .view-control,
.search-result-item .view-control {
position: absolute;
text-align: center;
top: 4px; }
/* line 86, ../sass/search/_search.scss */
.search .search-bar .clear-icon,
.search .search-bar .menu-icon {
cursor: pointer;
transition: color .25s; }
/* line 93, ../sass/search/_search.scss */
.search .search-bar .search-input {
position: relative;
width: 100%;
padding-left: 22px !important;
padding-right: 44px !important; }
/* line 100, ../sass/search/_search.scss */
.search .search-bar .search-input input {
width: 100%; }
/* line 105, ../sass/search/_search.scss */
.search .search-bar .search-icon {
color: #737373;
left: 3px;
transition: visibility .15s, opacity .15s, color .2s;
pointer-events: none; }
/* line 125, ../sass/search/_search.scss */
.search .search-bar .search-input:hover + div.search-icon {
color: #a6a6a6; }
/* line 129, ../sass/search/_search.scss */
.search .search-bar .clear-icon {
right: 22px;
visibility: hidden;
opacity: 0;
transition: visibility .15s, opacity .15s, color .2s; }
/* line 138, ../sass/search/_search.scss */
.search .search-bar .clear-icon.content {
visibility: visible;
opacity: 1; }
/* line 143, ../sass/search/_search.scss */
.search .search-bar .clear-icon:hover {
color: #a6a6a6; }
/* line 148, ../sass/search/_search.scss */
.search .search-bar .menu-icon {
font-size: 0.8em;
padding-right: 4px;
right: 4px;
text-align: right; }
/* line 154, ../sass/search/_search.scss */
.search .search-bar .menu-icon:hover {
color: #a6a6a6; }
/* line 159, ../sass/search/_search.scss */
.search .search-bar .search-menu-holder {
float: right;
left: -20px;
z-index: 1;
transition: visibility .05s, opacity .05s; }
/* line 169, ../sass/search/_search.scss */
.search .search-bar .search-menu-holder.off {
visibility: hidden;
opacity: 0; }
/* line 176, ../sass/search/_search.scss */
.search .search-bar .menu-icon:hover + div.search-menu-holder {
visibility: visible; }
/* line 179, ../sass/search/_search.scss */
.search .search-bar div.search-menu-holder:hover {
visibility: visible; }
/* line 184, ../sass/search/_search.scss */
.search .active-filter-display {
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
border-radius: 2px;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
line-height: 130%;
padding: 5px 0;
padding-left: 1.4625em;
font-size: 0.65em;
margin-top: 3px; }
/* line 199, ../sass/search/_search.scss */
.search .active-filter-display .clear-filters-icon {
opacity: 0.4;
font-size: 0.8em;
position: absolute;
left: 1px;
cursor: pointer; }
/* line 210, ../sass/search/_search.scss */
.search .active-filter-display.off {
visibility: hidden;
opacity: 0;
height: 0;
margin: 0;
padding: 0;
border: 0; }
/* line 220, ../sass/search/_search.scss */
.search .search-scroll {
order: 3;
margin-top: 4px;
overflow-y: auto;
top: auto;
height: auto;
max-height: 100%;
position: relative; }
/* line 235, ../sass/search/_search.scss */
.search .search-scroll .results .search-result-item {
-moz-transition: background-color 0.25s;
-o-transition: background-color 0.25s;
-webkit-transition: background-color 0.25s;
transition: background-color 0.25s;
margin-bottom: 2px;
border-radius: 2px;
padding-top: 4px;
padding-bottom: 2px; }
/* line 249, ../sass/search/_search.scss */
.search .search-scroll .results .search-result-item .label {
margin-left: 6px; }
/* line 253, ../sass/search/_search.scss */
.search .search-scroll .results .search-result-item .label .title-label {
display: inline-block;
position: absolute;
left: 29px;
right: 5px;
font-size: .8em;
line-height: 17px;
width: auto;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap; }
/* line 275, ../sass/search/_search.scss */
.search .search-scroll .results .search-result-item.selected {
background: #005177;
color: #fff; }
/* line 279, ../sass/search/_search.scss */
.search .search-scroll .results .search-result-item.selected .view-control {
color: #0099cc; }
/* line 282, ../sass/search/_search.scss */
.search .search-scroll .results .search-result-item.selected .label .type-icon {
color: #fff; }
/* line 287, ../sass/search/_search.scss */
.search .search-scroll .results .search-result-item .label .type-icon .l-icon-link {
display: none;
text-shadow: black 0 1px 2px;
z-index: 2;
color: #49dedb;
font-size: 8px;
line-height: 8px;
height: 8px;
width: 8px;
margin-left: -25px; }
/* line 299, ../sass/search/_search.scss */
.search .search-scroll .results .search-result-item:not(.selected):hover {
background: #404040;
color: #cccccc; }
/* line 302, ../sass/search/_search.scss */
.search .search-scroll .results .search-result-item:not(.selected):hover .context-trigger {
display: block; }
/* line 305, ../sass/search/_search.scss */
.search .search-scroll .results .search-result-item:not(.selected):hover .icon {
color: #33ccff; }
/* line 313, ../sass/search/_search.scss */
.search .search-scroll .load-icon {
position: relative; }
/* line 315, ../sass/search/_search.scss */
.search .search-scroll .load-icon.loading {
pointer-events: none;
margin-left: 6px; }
/* line 319, ../sass/search/_search.scss */
.search .search-scroll .load-icon.loading .title-label {
font-style: italic;
font-size: .9em;
opacity: 0.5;
margin-left: 26px;
line-height: 24px; }
/* line 329, ../sass/search/_search.scss */
.search .search-scroll .load-icon.loading .wait-spinner {
margin-left: 6px; }
/* line 334, ../sass/search/_search.scss */
.search .search-scroll .load-icon:not(.loading) {
cursor: pointer; }
/* line 339, ../sass/search/_search.scss */
.search .search-scroll .load-more-button {
margin-top: 5px 0;
font-size: 0.8em;
position: relative;
left: 50%;
margin-left: -45px;
text-align: center;
width: 90px;
white-space: nowrap; }
font-size: 1.1em;
right: 0px;
width: 30px;
text-align: center; }
/* line 45, ../sass/mobile/_tree.scss */
.tree-item .label,
.search-result-item .label {
left: 0;
right: 35px;
line-height: 35px; }
/* line 50, ../sass/mobile/_tree.scss */
.tree-item .label .type-icon,
.search-result-item .label .type-icon {
top: 9px;
bottom: auto;
height: 16px; } }

View File

@@ -83,7 +83,8 @@
<glyph unicode="&#xe604;" glyph-name="icon-tabular" d="M0 896v-192h448v256h-384c-35.2 0-64-28.8-64-64zM960 960h-384v-256h448v192c0 35.2-28.8 64-64 64zM576 576h448v-256h-448v256zM0 576h448v-256h-448v256zM0 0c0-35.2 28.8-64 64-64h384v256h-448v-192zM576-64h384c35.2 0 64 28.8 64 64v192h-448v-256z" />
<glyph unicode="&#xe605;" glyph-name="icon-calendar" d="M896 960h-768c-70.4 0-128-57.6-128-128v-768c0-70.4 57.6-128 128-128h768c70.4 0 128 57.6 128 128v768c0 70.4-57.6 128-128 128zM640 512h-256v192h256v-192zM384 448h256v-192h-256v192zM320 256h-256v192h256v-192zM320 704v-192h-256v192h256zM128 0c-17 0-33 6.6-45.2 18.8s-18.8 28.2-18.8 45.2v128h256v-192h-192zM384 0v192h256v-192h-256zM960 64c0-17-6.6-33-18.8-45.2s-28.2-18.8-45.2-18.8h-192v192h256v-128zM960 256h-256v192h256v-192zM960 512h-256v192h256v-192z" />
<glyph unicode="&#xe606;" glyph-name="icon-paint-bucket" d="M896 320c0 0-130-188-128-256 2-70.6 57.4-128 128-128s126 57.4 128 128c2 68-128 256-128 256zM449 831l0.2 64.8c0 35.4-28.4 64-63.8 64.2 0 0-0.2 0-0.2 0-35.2 0-63.8-28.6-64-63.8l-0.6-190.8-294-292.6c-50-50-12.4-215.2 112.4-340s290-162.4 340-112.4l417 423.6-447 447zM384 320c-70.6 0-128 57.4-128 128 0 47.4 25.8 89 64.4 111l-0.4-110.8c0-35.4 28.4-64 63.8-64.2 0 0 0.2 0 0.2 0 35.2 0 63.8 28.6 64 63.8l0.4 110.8c38-22.2 63.6-63.4 63.6-110.6 0-70.6-57.4-128-128-128z" />
<glyph unicode="&#xe607;" glyph-name="icon-x-in-circle" d="M512 960c-282.8 0-512-229.2-512-512s229.2-512 512-512 512 229.2 512 512-229.2 512-512 512zM832 256l-128-128-192 192-192-192-128 128 192 192-192 192 128 128 192-192 192 192 128-128-192-192 192-192z" />
<glyph unicode="&#xe607;" glyph-name="icon-x-in-circle-heavy" d="M512 960c-282.8 0-512-229.2-512-512s229.2-512 512-512 512 229.2 512 512-229.2 512-512 512zM832 256l-128-128-192 192-192-192-128 128 192 192-192 192 128 128 192-192 192 192 128-128-192-192 192-192z" />
<glyph unicode="&#xe608;" glyph-name="icon-info" d="M512 960c-282.8 0-512-229.2-512-512s229.2-512 512-512 512 229.2 512 512-229.2 512-512 512zM512 832c70.6 0 128-57.4 128-128s-57.4-128-128-128c-70.6 0-128 57.4-128 128s57.4 128 128 128zM704 128h-384v128h128v128h-128v128h320v-256h64v-128z" />
<glyph unicode="&#xe60d;" glyph-name="icon-arrows-right-left" d="M1024 448l-448-512v1024zM448 960l-448-512 448-512z" />
<glyph unicode="&#xe642;" glyph-name="icon-x" d="M384 448l-365.332-365.332c-24.89-24.89-24.89-65.62 0-90.51l37.49-37.49c24.89-24.89 65.62-24.89 90.51 0 0 0 365.332 365.332 365.332 365.332l365.332-365.332c24.89-24.89 65.62-24.89 90.51 0l37.49 37.49c24.89 24.89 24.89 65.62 0 90.51l-365.332 365.332c0 0 365.332 365.332 365.332 365.332 24.89 24.89 24.89 65.62 0 90.51l-37.49 37.49c-24.89 24.89-65.62 24.89-90.51 0 0 0-365.332-365.332-365.332-365.332l-365.332 365.332c-24.89 24.89-65.62 24.89-90.51 0l-37.49-37.49c-24.89-24.89-24.89-65.62 0-90.51 0 0 365.332-365.332 365.332-365.332z" />
</font></defs></svg>

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 27 KiB

View File

@@ -47,6 +47,8 @@ $colorPausedBg: #c56f01;
$colorPausedFg: #fff;
$colorCreateBtn: $colorKey;
$colorGridLines: rgba(#fff, 0.05);
$colorFormLines: rgba(#fff, 0.1);
$colorFormSectionHeader: rgba(#000, 0.2);
// Menu colors
$colorMenuBg: lighten($colorBodyBg, 23%);
$colorMenuFg: lighten($colorMenuBg, 70%);
@@ -104,6 +106,7 @@ $treeSearchInputBarH: 25px;
// Overlay
$ovrTopBarH: 60px;
$ovrFooterH: 40px;
$overlayMargin: 25px;
// Items
$ueBrowseGridItemLg: 200px;
$ueBrowseGridItemTopBarH: 20px;
@@ -111,6 +114,7 @@ $ueBrowseGridItemBottomBarH: 30px;
$itemPadLR: 5px;
// Tree
$treeVCW: 10px;
$treeTypeIconH: 16px;
$treeTypeIconW: 20px;
$treeContextTriggerW: 20px;
$colorItemTreeIcon: $colorKey;
@@ -144,10 +148,13 @@ $reqSymbolFontSize: 0.7em;
/************************** CONTROLS */
$controlDisabledOpacity: 0.3;
$formLabelW: 20%;
$formLabelW: 30%;
$formInputH: 22px;
$formRowCtrlsH: 14px;
$formTBPad: $interiorMargin;
$formLRPad: $interiorMargin;
$menuLineH: 1.5rem;
$menuLineHPx: 24px;
$scrollbarTrackSize: 10px;
$scrollbarTrackColorBg: rgba(#000, 0.4);
$btnStdH: 25px;

View File

@@ -71,12 +71,6 @@ p {
margin-bottom: $interiorMarginLg;
}
span {
/* 618 DEBUG
box-sizing: border-box;
*/
}
mct-container {
display: block;
}

View File

@@ -45,7 +45,7 @@
}
}
.bar .icon {
.bar .ui-symbol {
display: inline-block;
}
@@ -65,9 +65,9 @@
position: absolute;
}
.tree-item .type-icon {
font-size: 16px; // 16px is crisp size
}
//.tree-item .type-icon {
// font-size: 16px; // 16px is crisp size
//}
.l-icon-link:before {
content: "\f4";

View File

@@ -1,4 +1,3 @@
/*****************************************************************************
/*****************************************************************************
* Open MCT Web, Copyright (c) 2014-2015, United States Government
* as represented by the Administrator of the National Aeronautics and Space
@@ -28,11 +27,13 @@
@import "compass/utilities";
@import "mixins";
@import "mobile/mixins";
@import "effects";
@import "global";
@import "fonts";
@import "user-environ/layout";
//@import "search/layout";
@import "mobile/layout";
@import "fixed-position";
@import "about";
@import "text";
@@ -46,6 +47,7 @@
@import "controls/controls";
@import "controls/lists";
@import "controls/menus";
@import "mobile/controls/menus";
@import "controls/time-controller";
@import "edit/editor";
@import "features/imagery";
@@ -58,11 +60,14 @@
@import "forms/datetime";
@import "forms/filter";
@import "plots/plots-main";
@import "search/search";
@import "mobile/search/search";
@import "overlay/overlay";
@import "mobile/overlay/overlay";
@import "user-environ/frame";
@import "user-environ/top-bar";
@import "user-environ/bottom-bar";
@import "user-environ/object-browse";
//@import "user-environ/object-browse";
@import "user-environ/tool-bar";
@import "helpers/bubbles";
@import "helpers/splitter";
@@ -74,3 +79,4 @@
@import "initialization";
@import "hide-non-functional";
@import "views";
@import "tree/pane";

View File

@@ -19,157 +19,162 @@
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
@mixin absPosDefault($offset: 0px, $overflowHidden: hidden) {
overflow: $overflowHidden;
position: absolute;
top: $offset; right: $offset; bottom: $offset; left: $offset;
width: auto; height: auto;
top: $offset;
right: $offset;
bottom: $offset;
left: $offset;
width: auto;
height: auto;
}
@mixin ancillaryIcon($d, $c) {
// Used for small icons used in combination with larger icons,
// like the link and alert icons in tree items.
color: $c;
font-size: $d;
line-height: $d;
height: $d;
width: $d;
// Used for small icons used in combination with larger icons,
// like the link and alert icons in tree items.
color: $c;
font-size: $d;
line-height: $d;
height: $d;
width: $d;
}
@mixin trans-prop-nice($props, $t: 500ms) {
@if $t == 0 {
@include transition-property(none);
} @else {
@include transition-property($props);
@include transition-duration($t);
@include transition-timing-function(ease-in-out);
}
@if $t == 0 {
@include transition-property(none);
} @else {
@include transition-property($props);
@include transition-duration($t);
@include transition-timing-function(ease-in-out);
}
}
@mixin trans-prop-nice-fade($t: 0.5s) {
@if $t == 0 {
@include transition-property(none);
} @else {
@include transition-property(visibility, opacity, background-color, border-color);
@include transition-duration($t);
@include transition-timing-function(ease-in-out);
}
@if $t == 0 {
@include transition-property(none);
} @else {
@include transition-property(visibility, opacity, background-color, border-color);
@include transition-duration($t);
@include transition-timing-function(ease-in-out);
}
}
@mixin trans-prop-nice-resize-h($t: 0.5s) {
@include transition-property(height, bottom, top);
@include transition-duration($t);
@include transition-timing-function(ease-in-out);
@include transition-property(height, bottom, top);
@include transition-duration($t);
@include transition-timing-function(ease-in-out);
}
@mixin trans-prop-nice-resize-w($t: 0.5s) {
@include transition-property(width, left, right);
@include transition-duration($t);
@include transition-timing-function(ease-in-out);
@include transition-property(width, left, right);
@include transition-duration($t);
@include transition-timing-function(ease-in-out);
}
@mixin triangle-right($size, $color) {
$size: $size/2;
$ratio: 1;
width: 0;
height: 0;
border-top: $size/$ratio solid transparent;
border-left: $size solid $color;
border-bottom: $size/$ratio solid transparent;
$size: $size/2;
$ratio: 1;
width: 0;
height: 0;
border-top: $size/$ratio solid transparent;
border-left: $size solid $color;
border-bottom: $size/$ratio solid transparent;
}
@mixin triangle-down($size, $color) {
$size: $size/2;
$ratio: 1;
width: 0;
height: 0;
border-left: $size/$ratio solid transparent;
border-top: $size solid $color;
border-right: $size/$ratio solid transparent;
$size: $size/2;
$ratio: 1;
width: 0;
height: 0;
border-left: $size/$ratio solid transparent;
border-top: $size solid $color;
border-right: $size/$ratio solid transparent;
}
@mixin triangle($dir: "left", $size: 5px, $ratio: 1, $color: red) {
//$size: $size*2;
width: 0;
height: 0;
$slopedB: $size/$ratio solid transparent;
$straightB: $size solid $color;
@if $dir == "up" {
border-left: $slopedB;
border-right: $slopedB;
border-bottom: $straightB;
} @else if $dir == "right" {
border-top: $slopedB;
border-bottom: $slopedB;
border-left: $straightB;
} @else if $dir == "down" {
border-left: $slopedB;
border-right: $slopedB;
border-top: $straightB;
} @else {
border-top: $slopedB;
border-bottom: $slopedB;
border-right: $straightB;
}
//$size: $size*2;
width: 0;
height: 0;
$slopedB: $size/$ratio solid transparent;
$straightB: $size solid $color;
@if $dir == "up" {
border-left: $slopedB;
border-right: $slopedB;
border-bottom: $straightB;
} @else if $dir == "right" {
border-top: $slopedB;
border-bottom: $slopedB;
border-left: $straightB;
} @else if $dir == "down" {
border-left: $slopedB;
border-right: $slopedB;
border-top: $straightB;
} @else {
border-top: $slopedB;
border-bottom: $slopedB;
border-right: $straightB;
}
}
@mixin bgDiagonalStripes($c: yellow, $a: 0.1, $d: 40px) {
@include background-image(linear-gradient(-45deg,
rgba($c, $a) 25%, transparent 25%,
transparent 50%, rgba($c, $a) 50%,
rgba($c, $a) 75%, transparent 75%,
transparent 100%
));
background-repeat: repeat;
background-size: $d $d;
@include background-image(linear-gradient(-45deg,
rgba($c, $a) 25%, transparent 25%,
transparent 50%, rgba($c, $a) 50%,
rgba($c, $a) 75%, transparent 75%,
transparent 100%
));
background-repeat: repeat;
background-size: $d $d;
}
@mixin bgTicks($c: $colorBodyFg, $repeatDir: 'x') {
$deg: 90deg;
@if ($repeatDir != 'x') {
$deg: 0deg;
$repeatDir: repeat-y;
} @else {
$repeatDir: repeat-x;
}
$deg: 90deg;
@if ($repeatDir != 'x') {
$deg: 0deg;
$repeatDir: repeat-y;
} @else {
$repeatDir: repeat-x;
}
@include background-image(linear-gradient($deg,
$c 1px, transparent 1px,
transparent 100%
));
background-repeat: $repeatDir;
@include background-image(linear-gradient($deg,
$c 1px, transparent 1px,
transparent 100%
));
background-repeat: $repeatDir;
}
@mixin containerSubtle($bg: $colorBodyBg, $fg: $colorBodyFg, $hover: false) {
$ltnRatio: 7%;
$gradRatio: 5%;
$hovRatio: 7%;
$bgBase: lighten($bg, $ltnRatio);
$fgBase: lighten($fg, $ltnRatio);
$gradC1: lighten($bgBase, $gradRatio);
$gradC2: $bgBase;
$cInvokeBase: lighten($gradC1, $ltnRatio*2);
$ltnRatio: 7%;
$gradRatio: 5%;
$hovRatio: 7%;
$bgBase: lighten($bg, $ltnRatio);
$fgBase: lighten($fg, $ltnRatio);
$gradC1: lighten($bgBase, $gradRatio);
$gradC2: $bgBase;
$cInvokeBase: lighten($gradC1, $ltnRatio*2);
@include background-image(linear-gradient($gradC1, $gradC2));
@include border-radius($controlCr);
@include box-sizing(border-box);
@include boxShdwSubtle();
border: none;
border-top: 1px solid lighten($gradC1, 2%);
color: $fg;
display: inline-block;
@if $hover == true {
&:not(.disabled):hover {
@include background-image(linear-gradient(lighten($gradC1, $hovRatio), lighten($gradC2, $hovRatio)));
color: lighten($fgBase, $hovRatio);
&.btn-menu .invoke-menu {
color: lighten($cInvokeBase, $hovRatio);
}
}
}
&.btn-menu .invoke-menu {
color: $cInvokeBase;
}
@include background-image(linear-gradient($gradC1, $gradC2));
@include border-radius($controlCr);
@include box-sizing(border-box);
@include boxShdwSubtle();
border: none;
border-top: 1px solid lighten($gradC1, 2%);
color: $fg;
display: inline-block;
@if $hover == true {
&:not(.disabled):hover {
@include background-image(linear-gradient(lighten($gradC1, $hovRatio), lighten($gradC2, $hovRatio)));
color: lighten($fgBase, $hovRatio);
&.btn-menu .invoke-menu {
color: lighten($cInvokeBase, $hovRatio);
}
}
}
&.btn-menu .invoke-menu {
color: $cInvokeBase;
}
}
@mixin sliderTrack($bg: $scrollbarTrackColorBg) {
@@ -183,45 +188,45 @@
}
@mixin controlGrippy($b, $direction: horizontal, $w: 1px, $style: dotted) {
&:before {
@include trans-prop-nice("border-color",0.75s);
content: '';
display: block;
height: auto;
pointer-events: none;
position: absolute;
z-index: 2;
&:before {
@include trans-prop-nice("border-color", 0.75s);
content: '';
display: block;
height: auto;
pointer-events: none;
position: absolute;
z-index: 2;
@if $direction == "horizontal" {
border-top: $w $style darken($b, 15%);
top: 2px;
left: 5px;
right: 5px;
@if $direction == "horizontal" {
border-top: $w $style darken($b, 15%);
top: 2px;
left: 5px;
right: 5px;
} @else if $direction == "vertical" {
border-left: $w $style darken($b, 15%);
left: 2px;
bottom: 5px;
top: 5px;
}
}
&:not(.disabled):hover:before {
@include trans-prop-nice("border-color",50ms);
border-color: $colorKey;
}
} @else if $direction == "vertical" {
border-left: $w $style darken($b, 15%);
left: 2px;
bottom: 5px;
top: 5px;
}
}
&:not(.disabled):hover:before {
@include trans-prop-nice("border-color", 50ms);
border-color: $colorKey;
}
}
@mixin btnSubtle($bg: $colorBodyBg, $fg: $colorBodyFg) {
@include containerSubtle($bg, $fg, true);
@include containerSubtle($bg, $fg, true);
}
@mixin btnNoticeable($bg: $colorBodyBg, $fg: $colorBodyFg) {
// No longer should be used; use btnSubtle instead
//@include containerSubtle($bg, $fg, true);
//@include background-image(linear-gradient(lighten($bg, 20%), $bg));
/* &:not(.disabled):hover {
@include background-image(linear-gradient(lighten($bg, 30%), lighten($bg, 10%)));
}*/
// No longer should be used; use btnSubtle instead
//@include containerSubtle($bg, $fg, true);
//@include background-image(linear-gradient(lighten($bg, 20%), $bg));
/* &:not(.disabled):hover {
@include background-image(linear-gradient(lighten($bg, 30%), lighten($bg, 10%)));
}*/
}
@mixin boxIncised($sVal: 0.6) {
@@ -237,59 +242,60 @@
}
@mixin boxShdwLarge($sVal: 0.7) {
@include box-shadow(rgba(black, $sVal) 0 3px 10px);
@include box-shadow(rgba(black, $sVal) 0 3px 10px);
}
@mixin outerGlow($color: #fff, $sVal: 0.3) {
@include box-shadow(rgba($color, $sVal) 0 0 30px);
@include box-shadow(rgba($color, $sVal) 0 0 30px);
}
@mixin linearGlow($deg: 0, $c: red, $a: 0.4) {
@include background-image(linear-gradient($deg, rgba($c,0), rgba($c, $a) 100%));
@include background-image(linear-gradient($deg, rgba($c, 0), rgba($c, $a) 100%));
}
@mixin subtleGrad($deg: 0, $c: red, $a0: 0.2, $a1: 0.3) {
@include background-image(linear-gradient($deg, rgba($c,$a0), rgba($c, $a1) 100%));
@include background-image(linear-gradient($deg, rgba($c, $a0), rgba($c, $a1) 100%));
}
@mixin txtShdwSubtle($sVal: 0.1) {
@include text-shadow(rgba(black, $sVal) 0 1px 2px);
@include text-shadow(rgba(black, $sVal) 0 1px 2px);
}
@mixin txtShdwLarge($sVal: 0.7) {
@include text-shadow(rgba(black, $sVal) 0 3px 7px);
@include text-shadow(rgba(black, $sVal) 0 3px 7px);
}
/*********************************************** FORM ELEMENTS */
@mixin input-base($bg: $colorBodyBg, $fg: $colorBodyFg) {
@include appearance(none);
@include border-radius($controlCr);
@include box-sizing(border-box);
@include box-shadow(inset rgba(black, 0.65) 0 1px 4px);
// background: lighten($bg, 20%);
background: rgba(#fff, 0.1);
border: none;
//border-bottom: 1px solid rgba(#fff, 0.1);
color: lighten($fg, 20%);
outline: none;
&.error {
background: rgba(red, 0.5);
}
@include appearance(none);
@include border-radius($controlCr);
@include box-sizing(border-box);
@include box-shadow(inset rgba(black, 0.65) 0 1px 4px);
// background: lighten($bg, 20%);
background: rgba(#fff, 0.1);
border: none;
//border-bottom: 1px solid rgba(#fff, 0.1);
color: lighten($fg, 20%);
outline: none;
&.error {
background: rgba(red, 0.5);
}
}
@mixin nice-input($bg: $colorBodyBg, $fg: $colorBodyFg) {
@include input-base($bg, $fg);
padding: 0 $interiorMarginSm;
@include input-base($bg, $fg);
padding: 0 $interiorMarginSm;
}
@mixin nice-textarea($bg: $colorBodyBg, $fg: $colorBodyFg) {
@include input-base($bg, $fg);
padding: $interiorMargin;
@include input-base($bg, $fg);
padding: $interiorMargin;
}
@mixin subdued-input($bg: $colorBodyBg, $fg: $colorBodyFg) {
@include nice-input($bg, $fg);
background: lighten($bg, 3%);
border-bottom: 1px solid lighten($bg, 10%);
@include nice-input($bg, $fg);
background: lighten($bg, 3%);
border-bottom: 1px solid lighten($bg, 10%);
}
/*
@@ -307,24 +313,40 @@
padding: 0;
li {
list-style-type: none;
margin:0;
margin: 0;
padding: 0;
}
}
@mixin vertical-align {
/* This doesn't work on an element inside an element with absolute positioning that has height: auto */
position: relative;
top: 50%;
-webkit-transform: translateY(-50%);
-ms-transform: translateY(-50%);
transform: translateY(-50%);
@mixin webkitProp($name, $val) {
#{$name}: #{$val};
-webkit-#{$name}: #{$val};
}
@mixin webkitVal($name, $val) {
#{$name}: #{$val};
#{$name}: -webkit-#{$val};
}
@mixin verticalCenter {
/* This doesn't work on an element inside an element with absolute positioning that has height: auto */
//position: relative;
top: 50%;
-webkit-transform: translateY(-50%);
-ms-transform: translateY(-50%);
transform: translateY(-50%);
}
@mixin verticalCenterBlock($holderH, $itemH) {
top: floor(($holderH - $itemH) / 2);
bottom: auto;
height: $itemH;
}
@mixin ellipsize() {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
@mixin scrollH($showBar: auto) {
@@ -338,21 +360,26 @@
}
@mixin wait-spinner($b: 5px, $c: $colorAlt1) {
display: block;
position: absolute;
-webkit-animation: rotation .6s infinite linear;
-moz-animation: rotation .6s infinite linear;
-o-animation: rotation .6s infinite linear;
animation: rotation .6s infinite linear;
border-color: rgba($c, 0.25);
border-top-color: rgba($c, 1.0);
border-style: solid;
border-width: $b;
border-radius: 100%;
display: block;
position: absolute;
-webkit-animation: rotation .6s infinite linear;
-moz-animation: rotation .6s infinite linear;
-o-animation: rotation .6s infinite linear;
animation: rotation .6s infinite linear;
border-color: rgba($c, 0.25);
border-top-color: rgba($c, 1.0);
border-style: solid;
border-width: $b;
border-radius: 100%;
}
@mixin test($c: #ffcc00, $a: 0.2) {
background-color: rgba($c, $a);
background-color: rgba($c, $a);
}
@mixin tmpBorder($c: #ffcc00, $a: 0.75) {
@inlude box-sizing(border-box);
border: 1px dotted rgba($c, $a);
}
@mixin testObj($w: 2000px, $h: 1000px, $c: black, $a: 0.1) {
@@ -373,6 +400,6 @@
}
@mixin s-stale($a: 0.5) {
color: rgba($colorTelemFresh, $a) !important;
font-style: italic;
color: rgba($colorTelemFresh, $a) !important;
font-style: italic;
}

View File

@@ -26,7 +26,8 @@ $pad: $interiorMargin * $baseRatio;
.btn,
.l-btn {
@include user-select(none);
line-height: 1.5em; // Was 1.25em
//line-height: 1.5em; // Was 1.25em
line-height: 150%;
padding: 0 $pad;
text-decoration: none;
&.lg,

View File

@@ -102,7 +102,7 @@
.btn-bar {
// position: relative;
.btn,
/* .btn,
.btn-set,
.t-btn {
display: inline-block;
@@ -113,7 +113,7 @@
&:first-child {
// margin-left: 0;
}
}
}*/
}
.l-composite-control {
@@ -153,6 +153,7 @@
font-size: 0.7rem;
}
/*
.btn-set {
// Buttons that have a very tight conceptual grouping - no internal space between them.
display: inline-block;
@@ -171,37 +172,33 @@
}
}
}
*/
.object-browse-bar .btn,
.object-browse-bar .t-btn,
.object-browse-bar .view-switcher,
.top-bar .buttons-main .btn,
.top-bar .buttons-main .t-btn,
.top-bar .view-switcher,
.tool-bar .btn,
.tool-bar .t-btn {
$h: $btnToolbarH;
display: inline-block;
font-size: $h * $btnFontSizeToH;
height: $h;
line-height: $h - 3;
.icon:not(.invoke-menu) {
// position: relative;
// top: -0.04em;
//font-size: 150%;
//vertical-align: middle;
}
line-height: 200%;
vertical-align: top;
}
label.checkbox.custom {
$bg: lighten($colorBodyBg, $ltGamma);
$d: $formRowCtrlsH;
// @include vertical-align();
cursor: pointer;
display: inline-block;
line-height: $d;
margin-right: $interiorMargin * 4;
padding-left: $d + $interiorMargin;
position: relative;
vertical-align: top;
vertical-align: middle; // was top
em {
color: $colorBodyFg;
display: inline-block;
@@ -326,9 +323,9 @@ label.checkbox.custom {
$p: 10px;
$badgeM: $interiorMargin;
$badgeD: $h - ($badgeM * 2);
height: $h;
line-height: $h;
padding-right: 10px;
//height: $h;
//line-height: $h;
//padding-right: 10px;
&.browse-btn {
margin-right: $interiorMargin;
padding-left: $badgeD + $badgeM * 2;
@@ -351,7 +348,6 @@ label.checkbox.custom {
.context-available {
$c: $colorKey;
color: $c;
//padding: 0 5px;
&:hover {
color: lighten($c, 10%);
}
@@ -359,24 +355,63 @@ label.checkbox.custom {
.view-switcher {
@include trans-prop-nice-fade($controlFadeMs);
.type-icon {
//vertical-align: top;
}
}
/******************************************************** OBJECT-HEADER */
.object-header {
display: inline-block;
//@include test();
font-size: 1em;
.label {
.title-label {
color: lighten($colorBodyFg, 40%);
}
.type-icon {
font-size: 120%;
margin-right: $interiorMargin;
vertical-align: middle;
//> .title-label,
//> .type-icon,
//> .context-available {
// //@include tmpBorder(#6666ff);
// //vertical-align: middle;
//}
> .type-icon {
font-size: 120%;
float: left;
margin-right: $interiorMargin;
}
.l-elem-wrapper {
//@include test(#66f, 0.2);
@include webkitProp(justify-content, flex-start);
mct-representation {
// Holds the context-available item
// Must have min-width to make flex work properly
// in Safari
min-width: 0.7em;
}
}
.action {
margin-right: $interiorMargin;
}
.title-label {
//@include test(green, 0.9);
@include ellipsize();
color: lighten($colorBodyFg, 40%);
@include webkitProp(flex, '0 1 auto');
padding-right: 0.35em; // For context arrow. Done with em's so pad is relative to the scale of the text.
//position: relative;
}
.context-available {
font-size: 0.7em;
@include webkitProp(flex, '0 0 1');
//margin-right: $interiorMargin;
}
@include desktop {
.context-available {
@include trans-prop-nice(opacity, 0.25s);
opacity: 0;
font-size: 0.8em;
}
&:hover {
.context-available {
@@ -386,16 +421,6 @@ label.checkbox.custom {
}
}
.top-bar,
.object-browse-bar {
.object-header {
font-size: 1.1em;
span {
display: inline-block;
}
}
}
/******************************************************** SLIDERS */
.slider {
@@ -449,24 +474,26 @@ label.checkbox.custom {
/******************************************************** BROWSER ELEMENTS */
::-webkit-scrollbar {
@include sliderTrack();
height: $scrollbarTrackSize;
width: $scrollbarTrackSize;
}
::-webkit-scrollbar-thumb {
$bg: lighten($colorBodyBg, 10%);
@include background-image(linear-gradient(lighten($bg, 10%), lighten($bg, 5%) 20px));
@include border-radius(1px);
@include box-sizing(border-box);
@include boxShdwSubtle();
border-top: 1px solid lighten($bg, 20%);
&:hover {
@include background-image(linear-gradient(lighten($bg, 20%), lighten($bg, 15%) 20px));
@include desktop {
::-webkit-scrollbar {
@include sliderTrack();
height: $scrollbarTrackSize;
width: $scrollbarTrackSize;
}
}
::-webkit-scrollbar-corner {
background: rgba(#000, 0.4);
::-webkit-scrollbar-thumb {
$bg: lighten($colorBodyBg, 10%);
@include background-image(linear-gradient(lighten($bg, 10%), lighten($bg, 5%) 20px));
@include border-radius(1px);
@include box-sizing(border-box);
@include boxShdwSubtle();
border-top: 1px solid lighten($bg, 20%);
&:hover {
@include background-image(linear-gradient(lighten($bg, 20%), lighten($bg, 15%) 20px));
}
}
::-webkit-scrollbar-corner {
background: rgba(#000, 0.4);
}
}

View File

@@ -1,8 +1,6 @@
.l-image-main-wrapper,
.l-image-main,
.l-image-main-controlbar,
.l-image-main-controlbar .left,
.l-image-main-controlbar .right,
.l-image-thumbs-wrapper {
@include absPosDefault(0, false);
}
@@ -61,12 +59,9 @@
.left {
//@include test(red);
text-align: left;
width: 75% !important;
}
.right {
//@include test(green);
min-width: 40px;
width: 25% !important;
z-index: 2;
}
.l-date,

View File

@@ -26,8 +26,10 @@
@import "compass/utilities";
@import "constants";
@import "mobile/constants";
@import "mixins";
@import "forms/mixins";
@import "mobile/mixins";
@import "forms/elems";
@import "forms/textarea";
@import "forms/text-input";

View File

@@ -20,47 +20,49 @@
* at runtime from the About dialog for additional information.
*****************************************************************************/
.section-header {
@include border-radius(3px);
background: rgba(white, 0.1);
@include border-radius($basicCr);
background: rgba(#fff, 0.1);
$c: lighten($colorBodyFg, 20%);
//border-bottom: 1px solid rgba(#fff, 0.3);
color: $c;
font-size: 0.8em;
margin-top: $interiorMargin;
padding: $interiorMargin;
&:first-child {
margin-top: 0;
}
padding: $formTBPad $formLRPad;
text-transform: uppercase;
}
.form {
// @include test(orange);
.form-section {
position: relative;
margin-bottom: $interiorMarginLg * 2;
}
.form-row {
$m: $interiorMargin;
@include box-sizing(border-box);
@include clearfix;
border-top: 1px solid $colorInteriorBorder;
margin-top: $interiorMargin;
padding: $interiorMargin;
border-top: 1px solid $colorFormLines;
margin-top: $m;
padding: $formTBPad 0;
position: relative;
&.first {
border-top: none;
}
.label,
.controls {
// @include test(orange);
>.label,
>.controls {
@include box-sizing(border-box);
@include clearfix;
box-sizing: border-box;
font-size: 0.75rem;
font-size: 0.8rem;
line-height: $formInputH;
min-height: $formInputH;
}
>.label {
// Only style this way for immediate children of .form-row; prevents problems when .label is used in .controls section of a form
//@include test(orange, 0.05);
float: left;
min-width: 120px;
position: relative;
white-space: nowrap;
width: $formLabelW;

View File

@@ -25,18 +25,18 @@
padding-right: $reqSymbolW + $reqSymbolM; // Keep room for validation element
&::after {
// @include test(yellow, 0.3);
display: block;
/* display: block;
position: absolute;
top: 0;
right: $reqSymbolM;
bottom: 0;
left: auto;
height: auto;
width: $reqSymbolW;
width: $reqSymbolW;*/
font-family: symbolsfont;
font-size: $reqSymbolFontSize;
text-align: right;
vertical-align: middle;
//text-align: right;
//vertical-align: middle;
}
}
&.invalid,

View File

@@ -75,15 +75,32 @@
margin-left: $bubbleArwSize*2;
.l-infobubble::before {
right: 100%;
@include triangle('left', $bubbleArwSize, 1.5, $colorInfoBubbleBg);
// NOTE: [MOBILE] REMOVES TRIANGLE
// Removes the triangle located on the info
// bubble for phones only, for tablets and
// desktops, triangle remains.
@include desktopandtablet {
@include triangle('left', $bubbleArwSize, 1.5, $colorInfoBubbleBg);
}
}
}
&.arw-right {
margin-right: $bubbleArwSize*2;
// NOTE: [MOBILE] REMOVES RIGHT MARGIN
// Removes right margin made for the
// triangle on mobile
@include desktopandtablet {
margin-right: $bubbleArwSize*2;
}
.l-infobubble::before {
left: 100%;
@include triangle('right', $bubbleArwSize, 1.5, $colorInfoBubbleBg);
// NOTE: [MOBILE] REMOVES TRIANGLE
// Removes the triangle located on the info
// bubble for phones only, for tablets and
// desktops, triangle remains.
@include desktopandtablet {
@include triangle('right', $bubbleArwSize, 1.5, $colorInfoBubbleBg);
}
}
}
@@ -122,12 +139,12 @@
//************************************************* LOOK AND FEEL
.l-thumbsbubble-wrapper {
.arw-up {
@include triangle('up', $bubbleArwSize, 1.5, $colorThumbsBubbleBg);
}
.arw-down {
@include triangle('down', $bubbleArwSize, 1.5, $colorThumbsBubbleBg);
}
.arw-up {
@include triangle('up', $bubbleArwSize, 1.5, $colorThumbsBubbleBg);
}
.arw-down {
@include triangle('down', $bubbleArwSize, 1.5, $colorThumbsBubbleBg);
}
}
.s-infobubble {

View File

@@ -26,5 +26,8 @@
@import "compass/utilities";
@import "constants";
@import "mobile/constants";
@import "mixins";
@import "items/item";
@import "mobile/mixins";
@import "items/item";
@import "mobile/item";

View File

@@ -44,7 +44,7 @@
position: relative;
&:hover .item-main {
.item-type {
color: $colorKey !important;
color: lighten($colorKey, 10%) !important;
.l-icon-link {
color: $colorIconLink;
}
@@ -55,13 +55,16 @@
}
}
.contents {
top: $interiorMargin; right: $interiorMargin; bottom: $interiorMargin; left: $interiorMargin;
//@include test(red);
$m: $interiorMarginLg;
top: $m; right: $m; bottom: $m; left: $m;
}
.bar {
&.top-bar.abs {
&.top-bar {
bottom: auto;
height: $ueBrowseGridItemTopBarH;
line-height: $ueBrowseGridItemTopBarH;
text-align: right;
z-index: 5;
.left, .right {
width: auto;
@@ -73,10 +76,10 @@
}
}
}
&.bottom-bar.abs {
&.bottom-bar {
top: auto;
height: $ueBrowseGridItemBottomBarH;
padding: $interiorMargin;
//height: $ueBrowseGridItemBottomBarH;
line-height: 110%;
}
}
.item-main {
@@ -89,7 +92,7 @@
//@include trans-prop-nice("color", $transTime);
@include absPosDefault($iconMargin, false);
//@include test(red);
color: $colorItemFg;
//color: $colorItemFg;
text-align: center;
font-size: $iconD * 0.95; //6em;
line-height: $iconD;
@@ -99,11 +102,12 @@
//line-height: $lh;
.l-icon-link {
// When the link icon is in the item-type icon holder
color: darken($colorIconLink, 25%);
height: 36px;
line-height: 36px;
//color: darken($colorIconLink, 25%);
color: $colorIconLink;
height: auto;
line-height: 100%;
position: absolute;
font-size: 32px;
font-size: 0.3em;
left: 0px;
bottom: 10px;
z-index: 2;
@@ -123,13 +127,11 @@
}
.title {
@include txtShdwSubtle();
@include ellipsize();
color: lighten($colorBodyFg, 20%);
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
// font-weight: bold;
}
.details {
@include ellipsize();
font-size: 0.8em;
}
&.selected {

View File

@@ -0,0 +1,86 @@
/*****************************************************************************
* Open MCT Web, Copyright (c) 2014-2015, United States Government
* as represented by the Administrator of the National Aeronautics and Space
* Administration. All rights reserved.
*
* Open MCT Web is licensed under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
* Open MCT Web includes source code licensed under additional open source
* licenses. See the Open Source Licenses file (LICENSES.md) included with
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
/************************** STYLE */
$colorMobilePaneLeft: #222;
/************************** MOBILE REPRESENTATION ITEMS DIMENSIONS */
$mobileListIconSize: 30px;
$mobileTitleDescH: 35px;
$mobileOverlayMargin: 10px;
$phoneItemH: floor($ueBrowseGridItemLg/4);
$tabletItemH: floor($ueBrowseGridItemLg/3);
/************************** MOBILE TREE MENU DIMENSIONS */
$mobileTreeItemH: 35px;
$mobileTreeItemIndent: 20px;
$mobileTreeRightArrowW: 30px;
/************************** WINDOW DIMENSIONS FOR RWD */
$phoMaxW: 514px;
$phoMaxH: 740px;
$tabMinW: 515px;
$tabMaxW: 799px;
$tabMinH: 741px;
$tabMaxH: 1024px;
$compMinW: 800px;
$compMinH: 1025px;
/************************** MEDIA QUERIES: WINDOW CHECKS FOR SPECIFIC ORIENTATIONS FOR EACH DEVICE */
$screenPortrait: "screen and (orientation: portrait)";
$screenLandscape: "screen and (orientation: landscape)";
$mobileDevice: "(max-device-width: #{$tabMaxW}) and (max-device-height: #{$tabMaxH})";
$mobileDeviceEmu: "(max-device-width: #{$tabMaxH}) and (max-device-height: #{$tabMaxW})";
$phonePortraitCheck: "(max-width: #{$phoMaxW}) and (max-height: #{$phoMaxH})";
$phoneLandscapeCheck: "(max-height: #{$phoMaxW}) and (max-width: #{$phoMaxH})";
$tabWidPorCheck: "(min-width: #{$tabMinW}) and (max-width: #{$tabMaxW})";
$tabHeiPorCheck: "(min-height: #{$tabMinH}) and (max-height: #{$tabMaxH})";
$tabletPortraitCheck: "#{$tabWidPorCheck} and #{$tabHeiPorCheck}";
$tabWidLanCheck: "(min-height: #{$tabMinW}) and (max-height: #{$tabMaxW})";
$tabHeiLanCheck: "(min-width: #{$tabMinH}) and (max-width: #{$tabMaxH})";
$tabletLandscapeCheck: "#{$tabWidLanCheck} and #{$tabHeiLanCheck}";
$desktopPortraitCheck: "(min-device-width: #{$compMinW}) and (min-device-height: #{$compMinH})";
$desktopLandscapeCheck: "(min-device-width: #{$compMinH}) and (min-device-height: #{$compMinW})";
/************************** MEDIA QUERIES: WINDOWS FOR SPECIFIC ORIENTATIONS FOR EACH DEVICE */
$phonePortrait: "#{$screenPortrait} and #{$phonePortraitCheck} and #{$mobileDevice}";
$phoneLandscape: "#{$screenLandscape} and #{$phoneLandscapeCheck} and #{$mobileDevice}";
$phoneLandscapeEmu: "#{$screenLandscape} and #{$phoneLandscapeCheck} and #{$mobileDeviceEmu}";
$tabletPortrait: "#{$screenPortrait} and #{$tabletPortraitCheck} and #{$mobileDevice}";
$tabletLandscape: "#{$screenLandscape} and #{$tabletLandscapeCheck} and #{$mobileDevice}";
$tabletLandscapeEmu: "#{$screenLandscape} and #{$tabletLandscapeCheck} and #{$mobileDeviceEmu}";
$desktopPortrait: "screen and #{$desktopPortraitCheck}";
$desktopLandscape: "screen and #{$desktopLandscapeCheck}";
/************************** DEVICE PARAMETERS FOR MENUS/REPRESENTATIONS */
$proporMenuOnly: 90%;
$proporMenuWithView: 40%;

View File

@@ -0,0 +1,119 @@
/*****************************************************************************
* Open MCT Web, Copyright (c) 2014-2015, United States Government
* as represented by the Administrator of the National Aeronautics and Space
* Administration. All rights reserved.
*
* Open MCT Web is licensed under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
* Open MCT Web includes source code licensed under additional open source
* licenses. See the Open Source Licenses file (LICENSES.md) included with
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
// Sets the size of the items in the folder
// representation. Instead of a grid,
// a list is used.
.items-holder {
.item {
&.grid-item {
$titleH: 30px;
@include phoneandtablet {
width: 100%;
>.contents {
top: 0px; right: $interiorMarginLg; bottom: 0px; left: $interiorMarginLg;
}
.bar {
&.top-bar {
// Becomes the right side of the item
//@include test(blue);
bottom: 0 !important; left: auto !important; right: 20px !important;
width: 40px !important; height: auto !important;
text-align: right;
}
&.bottom-bar {
// Becomes the left side of the item
left: $mobileListIconSize + $interiorMarginLg;
right: 60px;
}
}
.item-main {
.item-type {
//@include test(blue);
font-size: $mobileListIconSize;
right: auto;
bottom: auto;
left: 0;
line-height: 100%;
text-align: left;
width: $mobileListIconSize;
.l-icon-link {
bottom: 0;
}
}
.item-open {
display: block;
opacity: 1;
font-size: 1em;
width: auto;
}
}
}
@include phone {
$dHei: $phoneItemH;
height: $dHei;
.bar {
&.top-bar {
// Becomes the right side of the item
line-height: $dHei !important;
}
&.bottom-bar {
@include verticalCenterBlock($dHei, $mobileTitleDescH);
}
}
.item-main {
.item-type {
@include verticalCenterBlock($dHei, $mobileListIconSize);
}
.item-open {
line-height: $dHei;
}
}
}
@include tablet {
$dHei: $tabletItemH;
height: $dHei;
.bar {
&.top-bar {
// Becomes the right side of the item
line-height: $dHei !important;
}
&.bottom-bar {
@include verticalCenterBlock($dHei, $mobileTitleDescH);
}
}
.item-main {
.item-type {
@include verticalCenterBlock($dHei, $mobileListIconSize);
}
.item-open {
line-height: $dHei;
}
}
}
}
}
}

View File

@@ -0,0 +1,252 @@
/*****************************************************************************
* Open MCT Web, Copyright (c) 2014-2015, United States Government
* as represented by the Administrator of the National Aeronautics and Space
* Administration. All rights reserved.
*
* Open MCT Web is licensed under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
* Open MCT Web includes source code licensed under additional open source
* licenses. See the Open Source Licenses file (LICENSES.md) included with
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
@include phoneandtablet {
// Wrapper of the entire 2 panes, only enacted on
// phone and tablet. Also for the panes
.browse-wrapper,
.pane {
top: 0 !important; right: 0; bottom: 0; left: 0;
}
//.pane.left.treeview {
// background-color: $colorMobilePaneLeft;
//}
//.pane.right-repr {
// //@include test();
// @include slMenuTransitions;
// margin-left: 0 !important;
// #content-area {
// @include slMenuTransitions;
// opacity: 1;
// }
//}
.user-environ .browse-area,
.user-environ .edit-area,
.user-environ .editor {
top: 0; left: 0; right: 0; bottom: $ueFooterH;
}
.holder.l-mobile {
top: $bodyMargin !important;
right: $bodyMargin !important;
bottom: $bodyMargin !important;
left: $bodyMargin !important;
}
// The left pane class
.pane.left {
@include user-select(none);
background-color: $colorMobilePaneLeft;
// When the left pane is inactive and closed
&.inactive {
opacity: 0;
right: 100% !important;
width: auto !important;
overflow-y: hidden;
overflow-x: hidden;
}
// When the left pane is active and open
&.active {
@include trans-prop-nice(opacity, .4s);
@include background-image(linear-gradient(90deg, rgba(black, 0) 98%, rgba(black, 0.3) 100%));
opacity: 1;
display: block !important;
//width: auto !important; // CH CO
right: auto !important;
width: $proporMenuWithView !important;
}
// When the pane is closed, hide the create button
.create-btn.major {
&.inactivePane {
display: none;
}
}
}
// The entire right pane class
// (can include inspector and representation)
.split-pane-component.secondary-split.pane.right {
//@include test();
@include slMenuTransitions;
margin-left: 0 !important;
#content-area {
@include slMenuTransitions;
opacity: 1;
}
&.leftInactive {
left: 0 !important;
}
// When the left pane is open or 'active'
&.leftActive {
left: $proporMenuWithView !important;
}
}
// OLD SLIDE MENU CODE
//// When the tree is hidden, these are the
//// classes used for the left menu and the
//// right representation.
//.browse-hidetree {
// @include user-select(none);
// // Sets the left tree menu when the tree
// // is hidden.
// .pane.left.treeview {
// opacity: 0;
// right: 100% !important;
// width: auto !important;
// overflow-y: hidden;
// overflow-x: hidden;
// }
// // Sets the right represenation when
// // the tree is hidden.
// .pane.right-repr {
// left: 0 !important;
// }
//}
//.browse-showtree {
// // NOTE: DISABLED SELECTION
// // Selection disabled in both panes
// // causing cut/copy/paste menu to
// // not appear. Should me moved in
// // future to properly work
// @include user-select(none);
//
// // Sets the left tree menu when the tree is shown.
// .pane.left.treeview {
// @include trans-prop-nice(opacity, .4s);
// @include background-image(linear-gradient(90deg, rgba(black, 0) 98%, rgba(black, 0.3) 100%));
// opacity: 1;
// display: block !important;
// //width: auto !important; // CH CO
// right: auto !important;
// width: $proporMenuWithView !important;
// }
// // Sets the right representation when the tree is shown.
// .pane.right-repr {
// left: $proporMenuWithView !important;
// //width: auto !important;
//
// //left: 0 !important;
// //transform: translateX($proporMenuWithView);
// }
//}
.mobile-menu-icon {
font-size: 110%;
position: absolute;
top: $bodyMargin + 2;
left: $bodyMargin;
}
.object-browse-bar {
//@include test();
left: 30px !important;
.context-available {
opacity: 1 !important;
}
.view-switcher {
margin-right: 0 !important;
.name {
// Hide the name in mobile
display: none;
}
}
}
.tree-holder {
overflow-x: hidden !important;
}
.mobile-disable-select {
@include user-select(none);
}
// Hides objects on phone and tablet
.mobile-hide,
.mobile-hide-important {
display: none !important;
}
.mobile-back-hide {
pointer-events: none;
@include trans-prop-nice(opacity, .4s);
opacity: 0;
}
.mobile-back-unhide {
pointer-events: all;
@include trans-prop-nice(opacity, .4s);
opacity: 1;
}
}
@include phonePortrait {
// The left pane
.pane.left {
// When the left pane is open and active
&.active {
width: $proporMenuOnly !important;
}
}
// The entire right pane
.split-pane-component.secondary-split.pane.right {
// Sliding transition for open/close of left pane
&.leftActive {
left: 0 !important;
@include webkitProp(transform, translateX($proporMenuOnly));
#content-area {
opacity: 0;
}
}
}
// OLD SLIDE MENU CODE
//.browse-showtree {
// .pane.left.treeview {
// width: $proporMenuOnly !important;
// }
// .pane.right-repr {
// left: 0 !important;
// @include webkitProp(transform, translateX($proporMenuOnly));
// #content-area {
// opacity: 0;
// }
// }
//}
}
@include desktop {
.desktop-hide {
display: none;
}
}

View File

@@ -0,0 +1,107 @@
/*****************************************************************************
* Open MCT Web, Copyright (c) 2014-2015, United States Government
* as represented by the Administrator of the National Aeronautics and Space
* Administration. All rights reserved.
*
* Open MCT Web is licensed under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
* Open MCT Web includes source code licensed under additional open source
* licenses. See the Open Source Licenses file (LICENSES.md) included with
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
// Phones in any orientation
@mixin phone {
@media #{$phonePortrait},
#{$phoneLandscape},
#{$phoneLandscapeEmu} {
@content
}
}
//Phones in portrait orientation
@mixin phonePortrait {
@media #{$phonePortrait} {
@content
}
}
// Phones in landscape orientation
@mixin phoneLandscape {
@media #{$phoneLandscape},
#{$phoneLandscapeEmu} {
@content
}
}
// Tablets in any orientation
@mixin tablet {
@media #{$tabletPortrait},
#{$tabletLandscape},
#{$tabletLandscapeEmu} {
@content
}
}
// Tablets in portrait orientation
@mixin tabletPortrait {
@media #{$tabletPortrait} {
@content
}
}
// Tablets in landscape orientation
@mixin tabletLandscape {
@media #{$tabletLandscape},
#{$tabletLandscapeEmu} {
@content
}
}
// Phones and tablets in any orientation
@mixin phoneandtablet {
@media #{$phonePortrait},
#{$phoneLandscape},
#{$phoneLandscapeEmu},
#{$tabletPortrait},
#{$tabletLandscape},
#{$tabletLandscapeEmu} {
@content
}
}
// Desktop monitors in any orientation
@mixin desktopandtablet {
@media #{$tabletPortrait},
#{$tabletLandscape},
#{$tabletLandscapeEmu},
#{$desktopPortrait},
#{$desktopLandscape} {
@content
}
}
// Desktop monitors in any orientation
@mixin desktop {
@media #{$desktopPortrait},
#{$desktopLandscape} {
@content
}
}
// Transition used for the slide menu
@mixin slMenuTransitions {
@include transition-duration(.35s);
transition-timing-function: ease;
backface-visibility: hidden;
}

View File

@@ -20,12 +20,38 @@
* at runtime from the About dialog for additional information.
*****************************************************************************/
// Overrides some styling in user-environ/_layout.scss
.pane {
&.treeview.left {
.tree-holder {
// Want tree holder to start right below the search bar.
top: 60px;
}
@include phoneandtablet {
ul.tree {
// Sets the margin on the left, which causes the
// running indentation after each folder is made
ul.tree {
margin-left: $mobileTreeItemIndent;
}
}
}
.tree-item,
.search-result-item {
height: $mobileTreeItemH;
line-height: $mobileTreeItemH;
margin-bottom: 0px;
.view-control {
//@include test(red);
position: absolute;
font-size: 1.1em;
right: 0px;
width: $mobileTreeRightArrowW;
text-align: center;
}
.label {
left: 0;
right: $mobileTreeRightArrowW + $interiorMargin; // Allows tree item name to stop prior to the arrow
line-height: $mobileTreeItemH;
//font-size: 1.1em; // CH CO
.type-icon {
@include verticalCenterBlock($mobileTreeItemH, $treeTypeIconH);
}
.title-label {
}
}
}
}

View File

@@ -19,12 +19,25 @@
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
.object-browse-bar {
height: $ueTopBarH;
line-height: $ueTopBarH;
.items-select {
.btn-menu {
margin-right: $interiorMargin * 3;
// Override the Create menu for mobile
@include phoneandtablet {
.menu-element {
.super-menu {
$d: 250px;
width: $d;
height: $d;
.pane {
&.left {
border-right: none;
padding-right: 0;
width: 100%;
}
&.right {
display: none;
}
}
}
}
}
}

View File

@@ -0,0 +1,51 @@
@include phoneandtablet {
.overlay {
$m: 0;
.clk-icon.close {
top: $mobileOverlayMargin; right: $mobileOverlayMargin;
}
> .holder {
@include border-radius($m);
top: $m;
right: $m;
bottom: $m;
left: $m;
> .contents {
top: $mobileOverlayMargin;
right: $mobileOverlayMargin;
bottom: $mobileOverlayMargin;
left: $mobileOverlayMargin;
.top-bar {
> .title {
margin-right: 1.2em;
}
}
.form.editor {
border: none;
.contents {
top: 0;
right: 0;
bottom: 0;
left: 0;
}
}
}
}
}
}
@include phone {
.overlay > .holder > .contents .form.editor .contents .form-row {
> .label,
> .controls {
//@include test(blue);
display: block;
float: none;
width: 100%;
}
}
}

View File

@@ -0,0 +1,13 @@
@include phone {
.search {
.search-bar {
// Hide menu-icon and adjust spacing when in phone mode
.menu-icon {
display: none;
}
.clear-icon {
right: $interiorMargin;
}
}
}
}

View File

@@ -24,16 +24,10 @@
background: $colorOvrBlocker;
z-index: 100;
}
.btn.close {
@include border-radius($basicCr * 2);
padding: 3px 6px;
.clk-icon.close {
position: absolute;
border: none;
top: $interiorMarginSm; right: $interiorMarginSm; bottom: auto; left: auto;
top: $interiorMarginLg; right: $interiorMarginLg; bottom: auto; left: auto;
z-index: 100;
}
.editor {
// background: $colorBodyBg;
}
>.holder {
$i: 15%;
@@ -43,13 +37,13 @@
top: $i; right: $i; bottom: $i; left: $i;
z-index: 101;
>.contents {
$m: 25px;
$m: $overlayMargin;
top: $m; right: $m; bottom: $m; left: $m;
}
}
.title {
@include ellipsize();
font-size: 1.3em;
font-size: 1.2em;
margin-bottom: $interiorMargin;
}

View File

@@ -28,7 +28,7 @@
height: auto;
bottom: 0;
}
//top: 23px;
top: 23px;
// Align with the top of the divider bar, below create button
//margin-top: 10px; // CH comment out
@@ -39,26 +39,20 @@
$iconWidth: 20px;
$leftMargin: 6px;
$rightPadding: 5px;
//padding-right: $rightPadding;
//@include test();
display: flex; //block;
flex-direction: column;
@include webkitVal(display, flex);
//display: flex;
@include webkitProp(flex-direction, column);
//flex-direction: column;
height: 100%;
.search-bar {
//$heightAdjust: 4px;
$textInputHeight: 19px; // This is equal to the default value, 19px
$iconEdgeM: 4px;
$iconD: $treeSearchInputBarH - ($iconEdgeM*2);
font-size: 0.8em;
//order: 1;
max-width: 250px;
position: relative;
width: 100%;
//height: $textInputHeight;
//margin-top: $heightAdjust;
.search-input,
.search-icon {
}
@@ -230,86 +224,6 @@
max-height: 100%;
position: relative;
.results {
.search-result-item {
// Include transitions (for the highlights)
@include single-transition(background-color, 0.25s);
// Space the results from each other
margin-bottom: 2px;
// Make the highlights the right color and shape.
// Attempting to match the style in the tree, but
// while having these be compact.
border-radius: 2px;
padding-top: 4px;
padding-bottom: 2px;
.label {
// Give some padding away from the left side
margin-left: $leftMargin;
.title-label {
display: inline-block;
position: absolute;
// Give some padding away from the left side
left: $leftMargin + 3px + $iconWidth;
// and the right side
right: $rightPadding;
// Size and position the text
font-size: .8em;
line-height: 17px;
// Hide overflow text
width: auto;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
// Change styling when it's selected
&.selected {
$c: #fff;
background: $colorKeySelectedBg;
color: $c;
.view-control {
color: $colorItemTreeIcon;
}
.label .type-icon {
color: #fff;
}
}
.label .type-icon .l-icon-link {
// Hide links for now. See GitHub issue #84.
display: none;
@include txtShdwSubtle(1);
z-index: 2;
@include ancillaryIcon(8px, $colorIconLink);
margin-left: -25px;
}
// Change styling when it's being hovered over
&:not(.selected) {
&:hover {
background: lighten($colorBodyBg, 5%);
color: lighten($colorBodyFg, 20%);
.context-trigger {
display: block;
}
.icon {
color: $colorItemTreeIconHover;
}
}
}
}
}
.load-icon {
position: relative;
&.loading {

View File

@@ -20,5 +20,6 @@
* at runtime from the About dialog for additional information.
*****************************************************************************/
@import "constants";
@import "mobile/constants";
@import "themes/theme-espresso";
@import "main";

View File

@@ -19,4 +19,6 @@
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
/* CONSTANTS */
/* CONSTANTS */
//$colorBodyBg: #fff;
//$colorBodyFg: #666;

View File

@@ -21,11 +21,11 @@
*****************************************************************************/
@import "compass";
@import "compass/css3";
@import "compass/css3/border-radius";
@import "compass/css3/opacity";
@import "compass/utilities";
@import "constants";
@import "mobile/constants";
@import "mixins";
@import "mobile/mixins";
@import "tree/tree";
@import "search/search";
@import "mobile/tree";

View File

@@ -0,0 +1,298 @@
/*****************************************************************************
* Open MCT Web, Copyright (c) 2014-2015, United States Government
* as represented by the Administrator of the National Aeronautics and Space
* Administration. All rights reserved.
*
* Open MCT Web is licensed under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
* Open MCT Web includes source code licensed under additional open source
* licenses. See the Open Source Licenses file (LICENSES.md) included with
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
// Added by shale on 08/19/2015. Styling for the collapsible tree view.
$transitionTime: 0.35s; // For the pane open/close
// Set the left pane (which contains the tree) to have no width to close
// (not display:none because we still need to have access to the create button)
.pane.left {
&.inactive {
width: 0 !important;
min-width: 0 !important;
// Undo the tree-holder's right padding when tree closed
.tree-holder {
padding-right: 0;
}
// Hide the search bar when the pane is closed
.search-holder {
display: none;
}
}
// When the pane is closed, move and resize the create button
.create-btn.major {
top: 0;
left: 0;
transition: all $transitionTime;
&.inactivePane {
top: 0;
left: 0;
position: relative;
padding: 0;
text-align: center;
font-size: 12px;
width: 13px;
height: 16px;
line-height: 14px;
left: -11px;
top: 20px;
// Remove 'Create' text from the button when in small mode
span {
display: none;
}
}
}
}
// Hide a splitter bar when the corresponding pane is inactive
.splitter-bar.splitter {
opacity: 1;
transition: opacity $transitionTime, visibility $transitionTime;
// Make the splitter bar vertically span to the top
top: 0;
&.inactive {
visibility: hidden;
opacity: 0;
&:before {
border-width: 0;
}
}
}
// Fade the splitter bar in when opening treeview, but immediately fade
// out when closing treeview
.splitter-bar.left.splitter {
&.inactive {
transition: opacity 0s, visibility 0s;
}
}
// The main view needs to align left when the left pane is moving around
.split-pane-component.secondary-split.pane.right {
// Sliding transition for open/close of left pane
&.leftInactive {
left: 0 !important;
}
&.slide {
transition: left $transitionTime;
}
.split-pane-component.items.pane {
// Sliding transition for open/close of right pane
&.rightInactive {
right: 0 !important;
}
&.slide {
transition: right $transitionTime;
}
// Tab buttons close to the splitter bars
.object-browse-bar {
position: relative;
.pane-tabs {
position: relative;
cursor: pointer;
font-family: symbolsfont;
background-color: darken($colorBodyFg, 25%);
width: 13px !important;
height: 16px;
line-height: 16px;
font-size: 10px;
text-align: center;
// Open and closes treeview
&.left {
left: -12px;
top: 3px;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
// Change button icon depending on state
&.inactivePane {
left: -15px;
&:after {
content: 'F';//'>';
}
}
&.activePane:after {
content: '<';
}
}
// Open and closes object inspector
&.right {
float: right;
right: -9px;
top: -13px;
border-top-left-radius: 2px;
border-bottom-left-radius: 2px;
// Change button icon depending on state
&.inactivePane {
right: -12px;
&:after {
content: '\e608';//'G';//'<';
}
}
&.activePane:after {
content: '>';
}
}
}
// Move domain object title to the right some to make room
// for treeview collapser button
.items-select {
margin-left: 10px;
}
// Similarly move the top button bar for the object inspector
.btn-bar.right {
margin-right: 10px;
}
}
}
.split-pane-component.object-inspector.pane.right {
min-width: 150px;
opacity: 1;
transition: opacity $transitionTime/2;
transition-delay: $transitionTime/2;
&.inactive {
min-width: 0 !important;
width: 0 !important;
visibility: hidden;
opacity: 0;
}
.holder.inspector-holder {
overflow-y: auto;
overflow-x: hidden;
.info-icon {
color: $colorKey;
}
ul li {
font-size: 0.9em;
// Add spacing between items
padding: 2px 0px;
margin: 2px 0px;
border-top: solid 1px grey;
&:first-child {
border-top-width: 0px;
}
// Style the titles
em {
font-weight: bold;
line-height: 1.25em;
&:after {
content: '\A';
white-space: pre;
}
}
// Style object labels
.inspector-location {
display: inline-block;
max-width: 100%;
.label {
cursor: pointer;
display: inline-block;
white-space: nowrap;
// Colors
transition: background-color 0.2s;
&:hover {
background-color: lighten($colorBodyBg, 5%);
}
// Sizing and spacing
border-radius: 4px;
padding: 3px;
margin: 2px;
// Horizontal overflow
max-width: 100%;
text-overflow: ellipsis;
overflow-x: hidden;
.icon.type-icon {
font-size: 14px;
.l-icon-link {
color: $colorIconLink;
font-size: 6px;
margin-left: -22px;
margin-right: 9px;
@include txtShdwSubtle(1);
z-index: 2;
}
}
}
// Add arrows to indicate tree heirarchy
&:after {
content: '>';
font-family: symbolsfont;
font-size: 8px;
//margin-left: -6px;
position: relative;
top: -8px;
left: -4px;
}
&:last-child:after {
content: '';
display: inline-block;
}
}
}
}
}
}

View File

@@ -25,133 +25,152 @@ ul.tree {
li {
display: block;
position: relative;
span.tree-item {
$runningItemW: 0;
@include border-radius($basicCr);
@include single-transition(background-color, 0.25s);
}
ul.tree {
margin-left: $treeVCW + $interiorMargin;
}
}
.tree-item,
.search-result-item {
$runningItemW: 0;
@include box-sizing(border-box);
@include border-radius($basicCr);
@include single-transition(background-color, 0.25s);
display: block;
font-size: 0.8rem;
height: $menuLineH;
line-height: $menuLineH;
margin-bottom: $interiorMarginSm;
position: relative;
.view-control {
display: inline-block;
margin-left: $interiorMargin;
font-size: 0.75em;
width: $treeVCW;
$runningItemW: $interiorMargin + $treeVCW;
// NOTE: [Mobile] Removed Hover on Mobile
@include desktop {
&:hover {
color: $colorItemTreeVCHover;
}
}
}
.label {
display: block;
// @include test(orange);
@include absPosDefault();
//left: $runningItemW + $interiorMargin; // Adding pad to left to make room for link icon
line-height: $menuLineH;
//left: $runningItemW;
.type-icon {
//@include absPosDefault(0, false);
$d: $treeTypeIconH; // 16px is crisp size
@include txtShdwSubtle(0.6);
font-size: $d;
color: $colorItemTreeIcon;
left: $interiorMargin;
position: absolute;
@include verticalCenterBlock($menuLineHPx, $d);
line-height: 100%;
right: auto; width: $d;
.icon {
&.l-icon-link,
&.l-icon-alert {
@include txtShdwSubtle(1);
position: absolute;
z-index: 2;
}
&.l-icon-alert {
$d: 8px;
@include ancillaryIcon($d, $colorAlert);
top: 1px;
right: -2px;
}
&.l-icon-link {
$d: 8px;
@include ancillaryIcon($d, $colorIconLink);
left: -3px;
bottom: 0px;
}
}
}
.title-label {
@include absPosDefault();
display: block;
font-size: 0.8em;
height: $menuLineH;
line-height: $menuLineH;
margin-bottom: $interiorMarginSm;
position: relative;
left: $runningItemW + ($interiorMargin * 3);
//right: $treeContextTriggerW + $interiorMargin;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
.view-control {
display: inline-block;
margin-left: $interiorMargin;
font-size: 0.75em;
width: $treeVCW;
$runningItemW: $interiorMargin + $treeVCW;
&:hover {
color: $colorItemTreeVCHover;
}
&.loading {
pointer-events: none;
.label {
opacity: 0.5;
.title-label {
font-style: italic;
}
}
.wait-spinner {
margin-left: 14px;
}
}
.label {
display: block;
// @include test(orange);
@include absPosDefault();
//left: $runningItemW + $interiorMargin; // Adding pad to left to make room for link icon
left: $runningItemW;
&.selected {
$c: #fff;
background: $colorKeySelectedBg;
color: $c;
.view-control {
color: $colorItemTreeIcon;
}
.label .type-icon {
color: #fff; //$colorItemTreeIconHover;
}
}
.type-icon {
@include absPosDefault(0, false);
@include txtShdwSubtle(0.6);
color: $colorItemTreeIcon;
left: $interiorMargin;
right: auto; width: 1em;
.icon {
&.l-icon-link,
&.l-icon-alert {
@include txtShdwSubtle(1);
position: absolute;
z-index: 2;
}
&.l-icon-alert {
$d: 8px;
@include ancillaryIcon($d, $colorAlert);
top: 1px;
right: -2px;
}
&.l-icon-link {
$d: 8px;
@include ancillaryIcon($d, $colorIconLink);
left: -3px;
bottom: 5px;
}
}
}
.title-label {
@include absPosDefault();
&:not(.selected) {
// NOTE: [Mobile] Removed Hover on Mobile
@include desktop {
&:hover {
background: rgba(#fff, 0.1); //lighten($colorBodyBg, 5%);
color: lighten($colorBodyFg, 20%);
.context-trigger {
display: block;
left: $runningItemW + ($interiorMargin * 3);
//right: $treeContextTriggerW + $interiorMargin;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
&.loading {
pointer-events: none;
.label {
opacity: 0.5;
.title-label {
font-style: italic;
}
}
.wait-spinner {
margin-left: 14px;
}
}
&.selected {
$c: #fff;
background: $colorKeySelectedBg;
color: $c;
.view-control {
color: $colorItemTreeIcon;
}
.label .type-icon {
color: #fff; //$colorItemTreeIconHover;
}
}
&:not(.selected) {
&:hover {
background: lighten($colorBodyBg, 5%);
color: lighten($colorBodyFg, 20%);
.context-trigger {
display: block;
}
.icon {
color: $colorItemTreeIconHover;
}
}
}
&:not(.loading) {
cursor: pointer;
}
.context-trigger {
$h: 0.9rem;
//display: none;
top: -1px;
position: absolute;
right: $interiorMarginSm;
.invoke-menu {
font-size: 0.75em;
height: $h;
line-height: $h;
.icon {
color: $colorItemTreeIconHover;
}
}
}
}
ul.tree {
margin-left: $treeVCW + $interiorMargin;
&:not(.loading) {
cursor: pointer;
}
.context-trigger {
$h: 0.9rem;
//display: none;
top: -1px;
position: absolute;
right: $interiorMarginSm;
.invoke-menu {
font-size: 0.75em;
height: $h;
line-height: $h;
}
}
}
.tree-item {
.label {
left: $interiorMargin + $treeVCW;
}
}

View File

@@ -20,25 +20,23 @@
* at runtime from the About dialog for additional information.
*****************************************************************************/
.frame {
$ohH: 20px;
$ohH: 16px;
$bc: $colorInteriorBorder;
&.child-frame.panel {
background: $colorBodyBg;
border: 1px solid $bc;
&:hover {
border-color: lighten($bc, 10%);
//z-index: 2;
}
.contents {
// overflow: hidden;
}
}
>.object-header.abs {
//@include test(red);
font-size: 0.75em;
height: $ohH;
line-height: $ohH;
}
>.object-holder.abs {
top: $ohH + $interiorMarginSm;
top: $ohH + $interiorMargin;
}
.contents {
$myM: $interiorMargin;
@@ -48,16 +46,20 @@
left: $myM;
}
&.frame-template {
// Hide the view switcher by default when it's in an element that's in a frame context
// Frame template is used because we need to target the lowest nested frame
.view-switcher {
opacity: 0;
line-height: $ohH;
z-index: 10;
}
&:hover .view-switcher {
// Show the view switcher on frame hover
//display: inline-block !important;
opacity: 1;
// Hide the view switcher by default when it's in an element that's in a frame context
// Frame template is used because we need to target the lowest nested frame
@include desktop {
.view-switcher {
opacity: 0;
}
&:hover .view-switcher {
// Show the view switcher on frame hover
opacity: 1;
}
}
}
.view-switcher {

View File

@@ -70,19 +70,26 @@
&.abs {
text-wrap: none;
white-space: nowrap;
}
&.left,
.left {
width: 45% !important;
right: auto !important;
}
&.right,
.right {
width: 45% !important;
left: auto !important;
text-align: right;
.icon.major {
margin-left: $interiorMargin * 3;
&.left,
.left {
width: 45%;
right: auto;
}
&.right,
.right {
width: 45%;
left: auto;
text-align: right;
.icon.major {
margin-left: $interiorMargin * 3;
}
}
.l-flex,
&.l-flex {
.left,
.right {
width: auto;
}
}
}
}
@@ -118,7 +125,7 @@
}
}
.bottom-bar {
.ue-bottom-bar {
//@include absPosDefault($bodyMargin);
@include absPosDefault(0);// New status bar design
top: auto;
@@ -200,7 +207,8 @@
.split-layout {
.split-pane-component.pane.left {
min-width: 150px;
max-width: 50%;
max-width: 800px;
width: $ueBrowseLeftPaneW;
}
}
}
@@ -208,8 +216,8 @@
.edit-mode {
.split-layout {
.split-pane-component.pane.right {
min-width: 150px;
max-width: 50%;
//min-width: 150px;
//max-width: 50%;
.split-pane-component.pane.bottom {
min-height: 50px;
max-height: 80%;
@@ -243,6 +251,12 @@
.right.abs {
top: auto;
}
//.left.abs {
// @include tmpBorder(green);
//}
//.right.abs {
// @include tmpBorder(red);
//}
}
.object-holder {
top: $ueTopBarH + $interiorMarginLg;
@@ -267,6 +281,7 @@
&.vertical {
// Slides left and right
>.pane {
// @include test();
margin-left: $interiorMargin;
>.holder {
left: 0;
@@ -283,6 +298,55 @@
}
}
.object-browse-bar .btn,
.object-browse-bar .t-btn,
.object-browse-bar .view-switcher,
.top-bar .buttons-main .btn,
.top-bar .buttons-main .t-btn,
.top-bar .view-switcher,
.tool-bar .btn,
.tool-bar .t-btn {
$h: $btnToolbarH;
display: inline-block;
font-size: $h * $btnFontSizeToH;
line-height: 200%;
vertical-align: top;
}
.object-browse-bar,
.top-bar {
.view-switcher {
margin-right: $interiorMarginLg * 2;
}
}
.object-browse-bar {
//@include test(blue);
@include absPosDefault(0, visible);
@include box-sizing(border-box);
height: $ueTopBarH;
line-height: $ueTopBarH;
white-space: nowrap;
.left {
padding-right: $interiorMarginLg * 2;
.l-back {
display: inline-block;
float: left;
margin-right: $interiorMarginLg;
}
}
}
.l-flex {
@include webkitVal('display', 'flex');
@include webkitProp('flex-flow', 'row nowrap');
.left {
//@include test(red);
@include webkitProp(flex, '1 1 0');
}
}
.vscroll {
overflow-y: auto;
}

View File

@@ -20,23 +20,16 @@
* at runtime from the About dialog for additional information.
*****************************************************************************/
.top-bar {
// $h: $ueTopBarH - 5px;
// background: rgba(#ff0000, 0.2);
// line-height: $ueTopBarBtnH;
&.browse,
&.edit {
border-bottom: 1px solid $colorInteriorBorder;
top: $bodyMargin; right: $bodyMargin; bottom: auto; left: $bodyMargin;
height: $ueTopBarEditH;
line-height: $ueTopBarH;
}
.action {
}
.title {
color: #fff;
// font-weight: bold;
}
.buttons-main {
@@ -44,9 +37,9 @@
left: auto;
text-align: right;
// width: 200px;
.btn {
margin-left: $interiorMargin;
}
// .btn {
// margin-left: $interiorMargin;
// }
}
}

View File

@@ -19,7 +19,7 @@
this source code distribution or the Licensing information page available
at runtime from the About dialog for additional information.
-->
<div class='abs bottom-bar ue-bottom-bar' ng-controller="BottomBarController as bar">
<div class='abs bottom-bar ue-bottom-bar mobile-disable-select' ng-controller="BottomBarController as bar">
<div id='status' class='status-holder'>
<mct-include ng-repeat="indicator in bar.getIndicators()"
ng-model="indicator.ngModel"

View File

@@ -21,7 +21,7 @@
-->
<span ng-controller="ViewSwitcherController">
<div
class="view-switcher menu-element btn btn-menu dropdown click-invoke"
class="view-switcher menu-element s-btn l-btn btn-menu dropdown click-invoke"
ng-if="view.length > 1"
ng-controller="ClickAwayController as toggle"
>

View File

@@ -19,7 +19,7 @@
this source code distribution or the Licensing information page available
at runtime from the About dialog for additional information.
-->
<div class="menu-element context-menu-wrapper" ng-controller="ContextMenuController">
<div class="menu-element context-menu-wrapper mobile-disable-select" ng-controller="ContextMenuController">
<div class="menu context-menu dropdown">
<ul>

View File

@@ -0,0 +1,59 @@
<!--
Open MCT Web, Copyright (c) 2014-2015, United States Government
as represented by the Administrator of the National Aeronautics and Space
Administration. All rights reserved.
Open MCT Web is licensed under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0.
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations
under the License.
Open MCT Web includes source code licensed under additional open source
licenses. See the Open Source Licenses file (LICENSES.md) included with
this source code distribution or the Licensing information page available
at runtime from the About dialog for additional information.
-->
<span ng-controller="ObjectInspectorController as controller">
<span class="ui-symbol info-icon">
&#xe608;
</span>
<ul>
<li ng-repeat="data in metadata">
<em>{{ data.name }}</em>
{{ data.value }}
</li>
<li ng-if="contextutalParents.length > 0">
<em title="The location of this linked object.">
Contextual Location
</em>
<span class="inspector-location"
ng-repeat="parent in contextutalParents">
<mct-representation key="'label'"
mct-object="parent"
ng-model="ngModel"
ng-click="ngModel.selectedObject = parent">
</mct-representation>
</span>
</li>
<li ng-if="primaryParents.length > 0">
<em title="The location of the object that this was linked from.">
Primary Location
</em>
<span class="inspector-location"
ng-repeat="parent in primaryParents">
<mct-representation key="'label'"
mct-object="parent"
ng-model="ngModel"
ng-click="ngModel.selectedObject = parent">
</mct-representation>
</span>
</li>
</ul>
</span>

View File

@@ -22,23 +22,28 @@
<span ng-controller="ToggleController as toggle">
<span ng-controller="TreeNodeController as treeNode">
<span
class="tree-item menus-to-left"
ng-class="{selected: treeNode.isSelected()}"
>
<span
class='ui-symbol view-control'
ng-click="toggle.toggle(); treeNode.trackExpansion()"
ng-if="model.composition !== undefined"
>
{{toggle.isActive() ? "v" : ">"}}
</span>
class="tree-item menus-to-left"
ng-class="{selected: treeNode.isSelected()}"
>
<mct-representation
key="'label'"
mct-object="domainObject"
ng-model="ngModel"
ng-click="!treeNode.checkMobile() || model.composition == undefined ||
model.composition.length == 0 ? treeNode.setObject(ngModel, domainObject) : toggle.toggle();
treeNode.trackExpansion()"
>
</mct-representation>
<span
class='ui-symbol view-control'
mct-object="domainObject"
ng-model="ngModel"
ng-click="ngModel.selectedObject = domainObject"
>
</mct-representation>
ng-click="treeNode.checkMobile() ? treeNode.setObject(ngModel, domainObject) :
toggle.toggle(); treeNode.trackExpansion()"
ng-if="model.composition !== undefined || treeNode.checkMobile()"
>
{{treeNode.checkMobile() ? "}" : toggle.isActive() ? "v" : ">"}}
</span>
</span>
<span
class="tree-item-subtree"

View File

@@ -0,0 +1,117 @@
/*****************************************************************************
* Open MCT Web, Copyright (c) 2014-2015, United States Government
* as represented by the Administrator of the National Aeronautics and Space
* Administration. All rights reserved.
*
* Open MCT Web is licensed under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
* Open MCT Web includes source code licensed under additional open source
* licenses. See the Open Source Licenses file (LICENSES.md) included with
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
/*global define,Promise*/
/**
* Module defining ObjectInspectorController. Created by shale on 08/21/2015.
*/
define(
[],
function () {
"use strict";
/**
* The ObjectInspectorController gets and formats the data for
* the inspector display
*
* @constructor
*/
function ObjectInspectorController($scope, objectService) {
$scope.primaryParents = [];
$scope.contextutalParents = [];
//$scope.isLink = false;
// Gets an array of the contextual parents/anscestors of the selected object
function getContextualPath() {
var currentObj = $scope.ngModel.selectedObject,
currentParent,
parents = [];
currentParent = currentObj &&
currentObj.hasCapability('context') &&
currentObj.getCapability('context').getParent();
while (currentParent && currentParent.getModel().type !== 'root' &&
currentParent.hasCapability('context')) {
// Record this object
parents.unshift(currentParent);
// Get the next one up the tree
currentObj = currentParent;
currentParent = currentObj.getCapability('context').getParent();
}
$scope.contextutalParents = parents;
}
// Gets an array of the parents/anscestors of the selected object's
// primary location (locational of original non-link)
function getPrimaryPath(current) {
var location;
// If this the the initial call of this recursive function
if (!current) {
current = $scope.ngModel.selectedObject;
$scope.primaryParents = [];
}
location = current.getModel().location;
if (location && location !== 'root') {
objectService.getObjects([location]).then(function (obj) {
var next = obj[location];
$scope.primaryParents.unshift(next);
getPrimaryPath(next);
});
}
}
// Gets the metadata for the selected object
function getMetadata() {
$scope.metadata = $scope.ngModel.selectedObject &&
$scope.ngModel.selectedObject.hasCapability('metadata') &&
$scope.ngModel.selectedObject.useCapability('metadata');
}
// Set scope variables when the selected object changes
$scope.$watch('ngModel.selectedObject', function () {
$scope.isLink = $scope.ngModel.selectedObject &&
$scope.ngModel.selectedObject.hasCapability('location') &&
$scope.ngModel.selectedObject.getCapability('location').isLink();
if ($scope.isLink) {
getPrimaryPath();
getContextualPath();
} else {
$scope.primaryParents = [];
getContextualPath();
}
getMetadata();
});
}
return ObjectInspectorController;
}
);

View File

@@ -19,7 +19,7 @@
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
/*global define,Promise*/
/*global define,Promise,window*/
/**
* Module defining TreeNodeController. Created by vwoeltje on 11/10/14.
@@ -51,9 +51,11 @@ define(
* @memberof platform/commonUI/general
* @constructor
*/
function TreeNodeController($scope, $timeout) {
function TreeNodeController($scope, $timeout, agentService) {
var self = this,
selectedObject = ($scope.ngModel || {}).selectedObject;
selectedObject = ($scope.ngModel || {}).selectedObject,
isSelected = false,
hasBeenExpanded = false;
// Look up the id for a domain object. A convenience
// for mapping; additionally does some undefined-checking.
@@ -75,7 +77,7 @@ define(
((navPath[index] === nodePath[index]) &&
checkPath(nodePath, navPath, index + 1));
}
// Consider the currently-navigated object and update
// parameters which support display.
function checkSelection() {
@@ -131,6 +133,8 @@ define(
this.isSelectedFlag = false;
this.hasBeenExpandedFlag = false;
this.$timeout = $timeout;
this.agentService = agentService;
this.$scope = $scope;
// Listen for changes which will effect display parameters
$scope.$watch("ngModel.selectedObject", setSelection);
@@ -172,6 +176,21 @@ define(
TreeNodeController.prototype.isSelected = function () {
return this.isSelectedFlag;
};
// Sets the selected object in the tree, to be the
// currently represented object. If the user is on phone
// and in portrait mode, than, hide the tree menu
TreeNodeController.prototype.setObject = function (ngModel, domainObject) {
ngModel.selectedObject = domainObject;
if (this.agentService.getOrientation(window.innerWidth, window.innerHeight) === "portrait" &&
this.agentService.isPhone(navigator.userAgent)) {
this.$scope.$emit('select-obj');
}
};
TreeNodeController.prototype.checkMobile = function () {
return this.agentService.isMobile(navigator.userAgent);
};
return TreeNodeController;
}

View File

@@ -29,7 +29,8 @@ define(
// Pixel width to allocate for the splitter itself
var SPLITTER_TEMPLATE = "<div class='abs'" +
"mct-drag-down=\"splitter.startMove()\" " +
"mct-drag=\"splitter.move(delta)\"></div>",
"mct-drag=\"splitter.move(delta)\" " +
"mct-drag-up=\"splitter.endMove()\"></div>",
OFFSETS_BY_EDGE = {
left: "offsetLeft",
right: "offsetRight",
@@ -44,7 +45,8 @@ define(
*/
function MCTSplitter() {
function link(scope, element, attrs, mctSplitPane) {
var initialPosition;
var initialPosition,
slideElement;
element.addClass("splitter");
@@ -55,8 +57,27 @@ define(
scope.splitter = {
// Begin moving this splitter
startMove: function () {
var splitter = element[0];
var splitter = element[0],
children = element.parent().children(),
i, j;
// Set initial position
initialPosition = mctSplitPane.position();
// Remove sliding class from sibling element so no delay in pane movement
for (i = 0; i < children.length; i += 1) {
// undefined check
if (children[i].classList) {
for (j = 0; j < children[i].classList.length; j += 1) {
if (children[i].classList[j] === 'slide') {
// Store the element that had the sliding class so
// we can replace it later
slideElement = children[i];
children[i].classList.remove('slide');
}
}
}
}
},
// Handle user changes to splitter position
move: function (delta) {
@@ -64,9 +85,15 @@ define(
index = anchor.orientation === "vertical" ? 0 : 1,
pixelDelta = delta[index] *
(anchor.reversed ? -1 : 1);
// Update the position of this splitter
mctSplitPane.position(initialPosition + pixelDelta);
},
// Replace sliding class
endMove: function () {
if (slideElement && slideElement.classList) {
slideElement.classList.add('slide');
}
}
};
}

View File

@@ -0,0 +1,103 @@
/*****************************************************************************
* Open MCT Web, Copyright (c) 2014-2015, United States Government
* as represented by the Administrator of the National Aeronautics and Space
* Administration. All rights reserved.
*
* Open MCT Web is licensed under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
* Open MCT Web includes source code licensed under additional open source
* licenses. See the Open Source Licenses file (LICENSES.md) included with
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
/*global define,Promise*/
/**
* Module defining AgentService.
*/
define(
[],
function () {
"use strict";
/**
* The query service handles calls for browser and userAgent
* info using a comparison between the userAgent and key
* device names
*/
function AgentService() {
// Gets the UA name if it is one of the following.
// If it is not (a desktop for example) nothing is
// returned instead
function getDeviceUA(ua) {
return ua.match(/iPad|iPhone|Android/i) ?
ua.match(/iPad|iPhone|Android/i) : "";
}
// Checks if gotten device is mobile,
// Mobile is defined as a phone or tablet
function isMobile(ua) {
if (getDeviceUA(ua)) {
return true;
} else {
return false;
}
}
// Checks if device is phone,
// phone is designated as only an
// iPhone device
function isPhone(ua) {
if (getDeviceUA(ua)[0] === "iPhone") {
return true;
} else {
return false;
}
}
// Returns the orientation of the device based on the
// device's window dimensions, pass in the innerWidth
// and innerheight of the current window
function getOrientation(innerWidth, innerHeight) {
if (innerWidth > innerHeight) {
return "landscape";
} else if (innerWidth < innerHeight) {
return "portrait";
}
}
return {
/**
* Returns the orientation for the user's device
*/
getOrientation: getOrientation,
/**
* Returns the a boolean checking if the user is
* on a mobile or non-mobile device. (mobile: true,
* non-mobile: false)
*/
isMobile: isMobile,
/**
* Returns the a boolean checking if the user is on
* a phone device. (phone: true, non-phone: false)
*/
isPhone: isPhone
};
}
return AgentService;
}
);

View File

@@ -0,0 +1,112 @@
/*****************************************************************************
* Open MCT Web, Copyright (c) 2014-2015, United States Government
* as represented by the Administrator of the National Aeronautics and Space
* Administration. All rights reserved.
*
* Open MCT Web is licensed under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
* Open MCT Web includes source code licensed under additional open source
* licenses. See the Open Source Licenses file (LICENSES.md) included with
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
/*global define,Promise,describe,it,expect,beforeEach,waitsFor,jasmine*/
/**
* Created by shale on 08/24/2015.
*/
define(
["../../src/controllers/ObjectInspectorController"],
function (ObjectInspectorController) {
"use strict";
describe("The object inspector controller ", function () {
var mockScope,
mockObjectService,
mockPromise,
mockDomainObject,
mockContextCapability,
mockLocationCapability,
controller;
beforeEach(function () {
mockScope = jasmine.createSpyObj(
"$scope",
[ "$watch" ]
);
mockScope.ngModel = {};
mockScope.ngModel.selectedObject = 'mock selected object';
mockObjectService = jasmine.createSpyObj(
"objectService",
[ "getObjects" ]
);
mockPromise = jasmine.createSpyObj(
"promise",
[ "then" ]
);
mockObjectService.getObjects.andReturn(mockPromise);
mockDomainObject = jasmine.createSpyObj(
"selectedObject",
[ "hasCapability", "getCapability", "useCapability", "getModel" ]
);
mockDomainObject.getModel.andReturn({location: 'somewhere'});
mockDomainObject.hasCapability.andReturn(true);
mockContextCapability = jasmine.createSpyObj(
"context capability",
[ "getParent" ]
);
mockLocationCapability = jasmine.createSpyObj(
"location capability",
[ "isLink" ]
);
mockDomainObject.getCapability.andCallFake(function (param) {
if (param === 'location') {
return mockLocationCapability;
} else if (param === 'context') {
return mockContextCapability;
}
});
controller = new ObjectInspectorController(mockScope, mockObjectService);
// Change the selected object to trigger the watch call
mockScope.ngModel.selectedObject = mockDomainObject;
});
it("watches for changes to the selected object", function () {
expect(mockScope.$watch).toHaveBeenCalledWith('ngModel.selectedObject', jasmine.any(Function));
});
it("looks for contextual parent objects", function () {
mockScope.$watch.mostRecentCall.args[1]();
expect(mockContextCapability.getParent).toHaveBeenCalled();
});
it("if link, looks for primary parent objects", function () {
mockLocationCapability.isLink.andReturn(true);
mockScope.$watch.mostRecentCall.args[1]();
expect(mockDomainObject.getModel).toHaveBeenCalled();
expect(mockObjectService.getObjects).toHaveBeenCalled();
mockPromise.then.mostRecentCall.args[0]({'somewhere': mockDomainObject});
});
it("gets metadata", function () {
mockScope.$watch.mostRecentCall.args[1]();
expect(mockDomainObject.useCapability).toHaveBeenCalledWith('metadata');
});
});
}
);

View File

@@ -29,6 +29,9 @@ define(
describe("The tree node controller", function () {
var mockScope,
mockTimeout,
mockAgentService,
mockNgModel,
mockDomainObject,
controller;
function TestObject(id, context) {
@@ -41,9 +44,19 @@ define(
}
beforeEach(function () {
mockScope = jasmine.createSpyObj("$scope", ["$watch", "$on"]);
mockScope = jasmine.createSpyObj("$scope", ["$watch", "$on", "$emit"]);
mockTimeout = jasmine.createSpy("$timeout");
controller = new TreeNodeController(mockScope, mockTimeout);
mockAgentService = jasmine.createSpyObj("agentService", ["isMobile", "isPhone", "getOrientation"]);
mockNgModel = jasmine.createSpyObj("ngModel", ["selectedObject"]);
mockDomainObject = jasmine.createSpyObj(
"domainObject",
[ "getId", "getCapability", "getModel", "useCapability" ]
);
mockAgentService.getOrientation.andReturn("portrait");
mockAgentService.isPhone.andReturn(true);
controller = new TreeNodeController(mockScope, mockTimeout, mockAgentService);
});
it("allows tracking of expansion state", function () {
@@ -183,6 +196,17 @@ define(
expect(controller.isSelected()).toBeFalsy();
});
it("check if tree node is in a mobile device", function () {
if (controller) {
controller.checkMobile();
}
});
it("allows a set object to emit select-obj", function () {
controller.setObject(mockNgModel, mockDomainObject);
expect(mockScope.$emit).toHaveBeenCalledWith('select-obj');
});
});
}
);

View File

@@ -0,0 +1,69 @@
/*****************************************************************************
* Open MCT Web, Copyright (c) 2014-2015, United States Government
* as represented by the Administrator of the National Aeronautics and Space
* Administration. All rights reserved.
*
* Open MCT Web is licensed under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
* Open MCT Web includes source code licensed under additional open source
* licenses. See the Open Source Licenses file (LICENSES.md) included with
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
/*global define,Promise,describe,it,expect,beforeEach,waitsFor,jasmine*/
/**
* MCTRepresentationSpec. Created by vwoeltje on 11/6/14.
*/
define(
["../../src/services/AgentService"],
function (AgentService) {
"use strict";
describe("The url service", function () {
var agentService,
mockWindow,
mockNavigator;
beforeEach(function () {
// Creates a mockLocation, used to
// do the view search
mockWindow = jasmine.createSpyObj(
"window",
[ "innerWidth", "innerHeight" ]
);
mockNavigator = jasmine.createSpyObj(
"navigator",
[ "userAgent" ]
);
agentService = new AgentService();
});
it("get current device user agent", function () {
mockNavigator.userAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.89 Safari/537.36";
agentService.isMobile(mockNavigator.userAgent);
agentService.isPhone(mockNavigator.userAgent);
mockNavigator.userAgent = "Mozilla/5.0 (iPad; CPU OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53";
agentService.isMobile(mockNavigator.userAgent);
mockNavigator.userAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X; en-us) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53";
agentService.isPhone(mockNavigator.userAgent);
});
it("get orientation of the current device", function () {
agentService.getOrientation(1024, 768);
agentService.getOrientation(768, 1024);
});
});
}
);

View File

@@ -91,7 +91,7 @@ define(
it("get url for a new tab using domainObject and mode", function () {
urlService.urlForNewTab(mockMode, mockDomainObject);
});
});
});
}
);

View File

@@ -4,6 +4,7 @@
"controllers/ClickAwayController",
"controllers/ContextMenuController",
"controllers/GetterSetterController",
"controllers/ObjectInspectorController",
"controllers/SelectorController",
"controllers/SplitPaneController",
"controllers/ToggleController",
@@ -13,6 +14,7 @@
"directives/MCTDrag",
"directives/MCTResize",
"directives/MCTScroll",
"services/AgentService",
"services/UrlService",
"StyleSheetLoader"
]

View File

@@ -24,9 +24,19 @@
"implementation": "gestures/InfoGesture.js",
"depends": [
"$timeout",
"agentService",
"infoService",
"INFO_HOVER_DELAY"
]
},
{
"key": "infobutton",
"implementation": "gestures/InfoButtonGesture.js",
"depends": [
"$document",
"agentService",
"infoService"
]
}
],
"services": [
@@ -37,15 +47,23 @@
"$compile",
"$document",
"$window",
"$rootScope"
"$rootScope",
"agentService"
]
}
],
],
"constants": [
{
"key": "INFO_HOVER_DELAY",
"value": 2000
}
],
"representations": [
{
"key": "info-button",
"templateUrl": "templates/info-button.html",
"gestures": [ "infobutton" ]
}
]
}
}

View File

@@ -0,0 +1,25 @@
<!--
Open MCT Web, Copyright (c) 2014-2015, United States Government
as represented by the Administrator of the National Aeronautics and Space
Administration. All rights reserved.
Open MCT Web is licensed under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0.
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations
under the License.
Open MCT Web includes source code licensed under additional open source
licenses. See the Open Source Licenses file (LICENSES.md) included with
this source code distribution or the Licensing information page available
at runtime from the About dialog for additional information.
-->
<!--The icon for the info button appearing in a grid item (list in folder)-->
<a class='ui-symbol icon mobile-info'>&#xe608;</a>

View File

@@ -0,0 +1,123 @@
/*****************************************************************************
* Open MCT Web, Copyright (c) 2014-2015, United States Government
* as represented by the Administrator of the National Aeronautics and Space
* Administration. All rights reserved.
*
* Open MCT Web is licensed under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
* Open MCT Web includes source code licensed under additional open source
* licenses. See the Open Source Licenses file (LICENSES.md) included with
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
/*global define*/
define(
[],
function () {
"use strict";
/**
* The `info` gesture displays domain object metadata in a
* bubble on hover.
*
* @constructor
* @param $document Angular's `$document`
* @param {InfoService} infoService a service which shows info bubbles
* @param element jqLite-wrapped DOM element
* @param {DomainObject} domainObject the domain object for which to
* show information
*/
function InfoGestureButton($document, agentService, infoService, element, domainObject) {
var dismissBubble,
touchPosition,
scopeOff,
body = $document.find('body');
function trackPosition(event) {
// Record touch position, so bubble can be shown at latest
// touch position, also offset by 22px to left (accounts for
// a finger-sized touch on the info button)
touchPosition = [ event.clientX - 22, event.clientY ];
}
// Hides the bubble and detaches the
// body hidebubble listener
function hideBubble() {
// If a bubble is showing, dismiss it
if (dismissBubble) {
dismissBubble();
dismissBubble = undefined;
}
// Detaches body touch listener
body.off('touchstart', hideBubble);
}
// Displays the bubble by tracking position of
// touch, using infoService to display the bubble,
// and then on any body touch the bubble is dismissed
function showBubble(event) {
trackPosition(event);
event.stopPropagation();
// Show the bubble, but on any touchstart on the
// body (anywhere) call hidebubble
dismissBubble = infoService.display(
"info-table",
domainObject.getModel().name,
domainObject.useCapability('metadata'),
touchPosition
);
// On any touch on the body, default body touches/events
// are prevented, the bubble is dismissed, and the touchstart
// body event is unbound, reallowing gestures
body.on('touchstart', function (event) {
event.preventDefault();
hideBubble();
body.unbind('touchstart');
});
}
// Checks if you are on a mobile device, if the device is
// mobile (agentService.isMobile() = true), then
// the a click on something (info button) brings up
// the bubble
if (agentService.isMobile(navigator.userAgent)) {
element.on('click', showBubble);
}
// Also make sure we dismiss bubble if representation is destroyed
// before the mouse actually leaves it
scopeOff = element.scope().$on('$destroy', hideBubble);
return {
/**
* Detach any event handlers associated with this gesture.
* @memberof InfoGesture
* @method
*/
destroy: function () {
// Dismiss any active bubble...
hideBubble();
// ...and detach listeners
element.off('click', showBubble);
scopeOff();
}
};
}
return InfoGestureButton;
}
);

View File

@@ -40,7 +40,7 @@ define(
* @param {DomainObject} domainObject the domain object for which to
* show information
*/
function InfoGesture($timeout, infoService, delay, element, domainObject) {
function InfoGesture($timeout, agentService, infoService, delay, element, domainObject) {
var self = this;
// Callback functions to preserve the "this" pointer (in the
@@ -64,9 +64,14 @@ define(
this.infoService = infoService;
this.delay = delay;
this.domainObject = domainObject;
// Show bubble (on a timeout) on mouse over
element.on('mouseenter', this.showBubbleCallback);
// Checks if you are on a mobile device, if the device is
// not mobile (agentService.isMobile() = false), then
// the pendingBubble and therefore hovering is allowed
if (!agentService.isMobile(navigator.userAgent)) {
// Show bubble (on a timeout) on mouse over
element.on('mouseenter', this.showBubbleCallback);
}
}
InfoGesture.prototype.trackPosition = function (event) {
@@ -93,7 +98,7 @@ define(
// arrays allocated while user mouses over things
this.mousePosition = undefined;
};
InfoGesture.prototype.showBubble = function (event) {
var self = this;
@@ -117,6 +122,7 @@ define(
this.element.on('mouseleave', this.hideBubbleCallback);
};
/**
* Detach any event handlers associated with this gesture.

View File

@@ -34,11 +34,12 @@ define(
* @memberof platform/commonUI/inspect
* @constructor
*/
function InfoService($compile, $document, $window, $rootScope) {
function InfoService($compile, $document, $window, $rootScope, agentService) {
this.$compile = $compile;
this.$document = $document;
this.$window = $window;
this.$rootScope = $rootScope;
this.agentService = agentService;
}
/**
@@ -64,12 +65,12 @@ define(
goLeft = position[0] > (winDim[0] - bubbleSpaceLR),
goUp = position[1] > (winDim[1] / 2),
bubble;
// Pass model & container parameters into the scope
scope.bubbleModel = content;
scope.bubbleTemplate = templateKey;
scope.bubbleLayout = (goUp ? 'arw-btm' : 'arw-top') + ' ' +
(goLeft ? 'arw-right' : 'arw-left');
(goLeft ? 'arw-right' : 'arw-left');
scope.bubbleTitle = title;
// Create the context menu
@@ -77,15 +78,22 @@ define(
// Position the bubble
bubble.css('position', 'absolute');
if (goLeft) {
bubble.css('right', (winDim[0] - position[0] + OFFSET[0]) + 'px');
if (this.agentService.isPhone(navigator.userAgent)) {
bubble.css('right', '0px');
bubble.css('left', '0px');
bubble.css('top', 'auto');
bubble.css('bottom', '25px');
} else {
bubble.css('left', position[0] + OFFSET[0] + 'px');
}
if (goUp) {
bubble.css('bottom', (winDim[1] - position[1] + OFFSET[1]) + 'px');
} else {
bubble.css('top', position[1] + OFFSET[1] + 'px');
if (goLeft) {
bubble.css('right', (winDim[0] - position[0] + OFFSET[0]) + 'px');
} else {
bubble.css('left', position[0] + OFFSET[0] + 'px');
}
if (goUp) {
bubble.css('bottom', (winDim[1] - position[1] + OFFSET[1]) + 'px');
} else {
bubble.css('top', position[1] + OFFSET[1] + 'px');
}
}
// Add the menu to the body

View File

@@ -0,0 +1,145 @@
/*****************************************************************************
* Open MCT Web, Copyright (c) 2014-2015, United States Government
* as represented by the Administrator of the National Aeronautics and Space
* Administration. All rights reserved.
*
* Open MCT Web is licensed under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
* Open MCT Web includes source code licensed under additional open source
* licenses. See the Open Source Licenses file (LICENSES.md) included with
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
/*global define,Promise,describe,it,expect,beforeEach,waitsFor,jasmine*/
define(
['../../src/gestures/InfoButtonGesture'],
function (InfoButtonGesture) {
"use strict";
describe("The info button gesture", function () {
var mockTimeout,
mockDocument,
mockBody,
mockAgentService,
mockInfoService,
mockElement,
mockDomainObject,
mockEvent,
mockScope,
mockOff,
testMetadata,
mockPromise,
mockHide,
gesture,
fireGesture,
fireDismissGesture;
beforeEach(function () {
mockTimeout = jasmine.createSpy('$timeout');
mockDocument = jasmine.createSpyObj('$document', ['find']);
mockBody = jasmine.createSpyObj('body', [ 'on', 'off', 'scope', 'css', 'unbind' ]);
mockDocument.find.andReturn(mockBody);
mockAgentService = jasmine.createSpyObj('agentService', ['isMobile', 'isPhone']);
mockInfoService = jasmine.createSpyObj(
'infoService',
[ 'display' ]
);
mockElement = jasmine.createSpyObj(
'element',
[ 'on', 'off', 'scope', 'css' ]
);
mockDomainObject = jasmine.createSpyObj(
'domainObject',
[ 'getId', 'getCapability', 'useCapability', 'getModel' ]
);
mockEvent = jasmine.createSpyObj("event", ["preventDefault", "stopPropagation"]);
mockEvent.pageX = 0;
mockEvent.pageY = 0;
mockScope = jasmine.createSpyObj('$scope', [ '$on' ]);
mockOff = jasmine.createSpy('$off');
testMetadata = [ { name: "Test name", value: "Test value" } ];
mockHide = jasmine.createSpy('hide');
mockDomainObject.getModel.andReturn({ name: "Test Object" });
mockDomainObject.useCapability.andCallFake(function (c) {
return (c === 'metadata') ? testMetadata : undefined;
});
mockElement.scope.andReturn(mockScope);
mockScope.$on.andReturn(mockOff);
mockInfoService.display.andReturn(mockHide);
mockAgentService.isMobile.andReturn(true);
gesture = new InfoButtonGesture(
mockDocument,
mockAgentService,
mockInfoService,
mockElement,
mockDomainObject
);
fireGesture = mockElement.on.mostRecentCall.args[1];
});
it("expect click on the representation", function () {
// Fires a click call on element and then
// expects the click to have happened
fireGesture(mockEvent);
expect(mockElement.on).toHaveBeenCalledWith(
"click",
jasmine.any(Function)
);
});
it("expect click then dismiss on the representation", function () {
// Fire the click and then expect the click
fireGesture(mockEvent);
expect(mockElement.on).toHaveBeenCalledWith(
"click",
jasmine.any(Function)
);
// Get the touch start on the body
// and fire the dismiss gesture
fireDismissGesture = mockBody.on.mostRecentCall.args[1];
fireDismissGesture(mockEvent);
// Expect Body to have been touched, event.preventDefault()
// to be called, then the mockBody listener to be detached
// lastly unbind the touchstart used to dismiss so other
// events can be called
expect(mockBody.on).toHaveBeenCalledWith(
"touchstart",
jasmine.any(Function)
);
expect(mockEvent.preventDefault).toHaveBeenCalled();
expect(mockBody.off).toHaveBeenCalledWith(
"touchstart",
jasmine.any(Function)
);
expect(mockBody.unbind).toHaveBeenCalledWith(
'touchstart'
);
});
it("detaches a callback for info bubble events when destroyed", function () {
expect(mockElement.off).not.toHaveBeenCalled();
gesture.destroy();
expect(mockElement.off).toHaveBeenCalledWith(
"click",
jasmine.any(Function)
);
});
});
}
);

View File

@@ -28,6 +28,7 @@ define(
describe("The info gesture", function () {
var mockTimeout,
mockAgentService,
mockInfoService,
testDelay = 12321,
mockElement,
@@ -50,6 +51,7 @@ define(
beforeEach(function () {
mockTimeout = jasmine.createSpy('$timeout');
mockTimeout.cancel = jasmine.createSpy('cancel');
mockAgentService = jasmine.createSpyObj('agentService', ['isMobile']);
mockInfoService = jasmine.createSpyObj(
'infoService',
[ 'display' ]
@@ -79,6 +81,7 @@ define(
gesture = new InfoGesture(
mockTimeout,
mockAgentService,
mockInfoService,
testDelay,
mockElement,

View File

@@ -31,6 +31,7 @@ define(
mockDocument,
testWindow,
mockRootScope,
mockAgentService,
mockCompiledTemplate,
testScope,
mockBody,
@@ -42,6 +43,7 @@ define(
mockDocument = jasmine.createSpyObj('$document', ['find']);
testWindow = { innerWidth: 1000, innerHeight: 100 };
mockRootScope = jasmine.createSpyObj('$rootScope', ['$new']);
mockAgentService = jasmine.createSpyObj('agentService', ['isMobile', 'isPhone']);
mockCompiledTemplate = jasmine.createSpy('template');
testScope = {};
mockBody = jasmine.createSpyObj('body', ['append']);
@@ -58,7 +60,8 @@ define(
mockCompile,
mockDocument,
testWindow,
mockRootScope
mockRootScope,
mockAgentService
);
});
@@ -124,6 +127,18 @@ define(
(40 + InfoConstants.BUBBLE_OFFSET[1]) + 'px'
);
});
it("when on phone device, positioning is always on bottom", function () {
mockAgentService.isPhone.andReturn(true);
service = new InfoService(
mockCompile,
mockDocument,
testWindow,
mockRootScope,
mockAgentService
);
service.display('', '', {}, [0, 0]);
});
});
});

View File

@@ -1,4 +1,5 @@
[
"gestures/InfoGesture",
"gestures/InfoButtonGesture",
"services/InfoService"
]

View File

@@ -117,12 +117,6 @@
"pattern": "\\S+",
"required": true,
"cssclass": "l-med"
},
{
"control": "checkbox",
"name": "Display title by default",
"key": "displayTitle",
"property": [ "display", "title" ]
}
]
},
@@ -142,7 +136,11 @@
{
"key": "unknown",
"name": "Unknown Type",
"glyph": "?"
"glyph": "\u003f"
},
{
"name": "Unknown Type",
"glyph": "\u003f"
}
],
"capabilities": [

View File

@@ -33,7 +33,7 @@
>
</div>
<div class="l-image-main-controlbar bar">
<div class="l-image-main-controlbar l-flex bar">
<div class="left">
<a
class="t-btn l-btn s-btn s-icon-btn s-very-subtle show-thumbs sm"

View File

@@ -20,13 +20,12 @@
at runtime from the About dialog for additional information.
-->
<div class="frame frame-template abs">
<div class="bar abs object-header object-top-bar">
<div class="title left abs">
<mct-representation key="'node'"
mct-object="domainObject">
<div class="bar abs l-flex object-header object-top-bar">
<div class="left">
<mct-representation key="'object-header'" mct-object="domainObject">
</mct-representation>
</div>
<div class="btn-bar right abs">
<div class="btn-bar right">
<mct-representation key="'switcher'"
ng-model="representation"
mct-object="domainObject">

View File

@@ -26,7 +26,7 @@
{
"key": "menu",
"implementation": "gestures/ContextMenuGesture.js",
"depends": []
"depends": ["$timeout", "agentService"]
}
],
"components": [
@@ -54,7 +54,7 @@
{
"key": "menu",
"implementation": "actions/ContextMenuAction.js",
"depends": [ "$compile", "$document", "$window", "$rootScope" ]
"depends": [ "$compile", "$document", "$window", "$rootScope", "agentService" ]
}
]
}

View File

@@ -49,8 +49,9 @@ define(
* should be performed
* @implements {Action}
*/
function ContextMenuAction($compile, $document, $window, $rootScope, actionContext) {
function ContextMenuAction($compile, $document, $window, $rootScope, agentService, actionContext) {
this.$compile = $compile;
this.agentService = agentService;
this.actionContext = actionContext;
this.getDocument = function () { return $document; };
this.getWindow = function () { return $window; };
@@ -99,22 +100,34 @@ define(
"go-up": goUp,
"context-menu-holder": true
};
// Create the context menu
menu = $compile(MENU_TEMPLATE)(scope);
// Add the menu to the body
body.append(menu);
// Stop propagation so that clicks on the menu do not close the menu
menu.on('mousedown', function (event) {
event.stopPropagation();
});
// Stop propagation so that clicks or touches on the menu do not close the menu
if (!(this.agentService.isMobile(navigator.userAgent))) {
menu.on('mousedown', function (event) {
event.stopPropagation();
});
} else if ((this.agentService.isMobile(navigator.userAgent))) {
menu.on('touchstart', function (event) {
event.stopPropagation();
});
}
// Dismiss the menu when body is clicked elsewhere
// Dismiss the menu when body is clicked/touched elsewhere
// ('mousedown' because 'click' breaks left-click context menus)
body.on('mousedown', dismiss);
menu.on('click', dismiss);
// ('touchstart' because 'touch' breaks context menus up)
if (!(this.agentService.isMobile(navigator.userAgent))) {
body.on('mousedown', dismiss);
// NOTE: Apply to mobile?
menu.on('click', dismiss);
} else if (this.agentService.isMobile(navigator.userAgent)) {
body.on('touchstart', dismiss);
}
// Don't launch browser's context menu
actionContext.event.preventDefault();

View File

@@ -41,7 +41,10 @@ define(
* in the context menu will be performed
* @implements {Gesture}
*/
function ContextMenuGesture(element, domainObject) {
function ContextMenuGesture($timeout, agentService, element, domainObject) {
var isPressing,
longTouchTime = 500;
function showMenu(event) {
domainObject.getCapability('action').perform({
key: 'menu',
@@ -49,9 +52,35 @@ define(
event: event
});
}
// When context menu event occurs, show object actions instead
element.on('contextmenu', showMenu);
// When context menu event occurs, show object actions instead
if (!agentService.isMobile(navigator.userAgent)) {
// When context menu event occurs, show object actions instead
element.on('contextmenu', showMenu);
} else if (agentService.isMobile(navigator.userAgent)) {
// If on mobile device, then start timeout for the single touch event
// during the timeout 'isPressing' is true.
element.on('touchstart', function (event) {
if (event.touches.length < 2) {
isPressing = true;
// After the timeout, if 'isPressing' is
// true, display context menu for object
$timeout(function () {
if (isPressing) {
showMenu(event);
}
}, longTouchTime);
}
});
// Whenever the touch event ends, 'isPressing' is false.
element.on('touchend', function (event) {
isPressing = false;
});
}
this.showMenuCallback = showMenu;
this.element = element;

View File

@@ -43,13 +43,24 @@ define(
mockBody,
mockWindow,
mockRootScope,
mockAgentService,
mockScope,
mockElement,
mockDomainObject,
mockEvent,
mockActionContext,
mockNavigator,
mockStopPropagation,
action;
function fireEvent(evt, value) {
mockElement.on.calls.forEach(function (call) {
if (call.args[0] === evt) {
call.args[1](value);
}
});
}
beforeEach(function () {
mockCompile = jasmine.createSpy("$compile");
mockCompiledTemplate = jasmine.createSpy("template");
@@ -58,10 +69,11 @@ define(
mockBody = jasmine.createSpyObj("body", JQLITE_FUNCTIONS);
mockWindow = { innerWidth: MENU_DIMENSIONS[0] * 4, innerHeight: MENU_DIMENSIONS[1] * 4 };
mockRootScope = jasmine.createSpyObj("$rootScope", ["$new"]);
mockAgentService = jasmine.createSpyObj("agentService", ["isMobile"]);
mockScope = {};
mockElement = jasmine.createSpyObj("element", JQLITE_FUNCTIONS);
mockDomainObject = jasmine.createSpyObj("domainObject", DOMAIN_OBJECT_METHODS);
mockEvent = jasmine.createSpyObj("event", ["preventDefault"]);
mockEvent = jasmine.createSpyObj("event", ["preventDefault", "stopPropagation"]);
mockEvent.pageX = 0;
mockEvent.pageY = 0;
@@ -71,12 +83,13 @@ define(
mockRootScope.$new.andReturn(mockScope);
mockActionContext = {key: 'menu', domainObject: mockDomainObject, event: mockEvent};
action = new ContextMenuAction(
mockCompile,
mockDocument,
mockWindow,
mockRootScope,
mockAgentService,
mockActionContext
);
});
@@ -156,6 +169,42 @@ define(
// Menu should have been removed
expect(mockMenu.remove).toHaveBeenCalled();
});
it("keeps a menu when menu is clicked", function () {
// Show the menu
action.perform();
// Find and fire body's mousedown listener
mockMenu.on.calls.forEach(function (call) {
if (call.args[0] === 'mousedown') {
call.args[1](mockEvent);
}
});
// Menu should have been removed
expect(mockMenu.remove).not.toHaveBeenCalled();
// Listener should have been detached from body
expect(mockBody.off).not.toHaveBeenCalled();
});
it("keeps a menu when menu is clicked on mobile", function () {
mockAgentService.isMobile.andReturn(true);
action = new ContextMenuAction(
mockCompile,
mockDocument,
mockWindow,
mockRootScope,
mockAgentService,
mockActionContext
);
action.perform();
mockMenu.on.calls.forEach(function (call) {
if (call.args[0] === 'touchstart') {
call.args[1](mockEvent);
}
});
});
});
}
);

View File

@@ -31,28 +31,54 @@ define(
"use strict";
var JQLITE_FUNCTIONS = [ "on", "off", "find", "append", "remove" ],
DOMAIN_OBJECT_METHODS = [ "getId", "getModel", "getCapability", "hasCapability", "useCapability" ];
DOMAIN_OBJECT_METHODS = [ "getId", "getModel", "getCapability", "hasCapability", "useCapability"];
describe("The 'context menu' gesture", function () {
var mockElement,
var mockTimeout,
mockElement,
mockAgentService,
mockDomainObject,
mockEvent,
mockTouchEvent,
mockContextMenuAction,
mockActionContext,
mockTouch,
gesture,
fireGesture;
fireGesture,
fireTouchStartGesture,
fireTouchEndGesture;
beforeEach(function () {
mockTimeout = jasmine.createSpy("$timeout");
mockElement = jasmine.createSpyObj("element", JQLITE_FUNCTIONS);
mockAgentService = jasmine.createSpyObj("agentService", ["isMobile"]);
mockDomainObject = jasmine.createSpyObj("domainObject", DOMAIN_OBJECT_METHODS);
mockEvent = jasmine.createSpyObj("event", ["preventDefault"]);
gesture = new ContextMenuGesture(mockElement, mockDomainObject);
mockContextMenuAction = jasmine.createSpyObj(
"action",
[ "perform", "getActions" ]
);
mockActionContext = jasmine.createSpyObj(
"actionContext",
[ "" ]
);
mockActionContext = {domainObject: mockDomainObject, event: mockEvent};
mockDomainObject.getCapability.andReturn(mockContextMenuAction);
mockContextMenuAction.perform.andReturn(jasmine.any(Function));
mockAgentService.isMobile.andReturn(false);
gesture = new ContextMenuGesture(mockTimeout, mockAgentService, mockElement, mockDomainObject);
// Capture the contextmenu callback
fireGesture = mockElement.on.mostRecentCall.args[1];
});
it("attaches a callback for context menu events", function () {
// Fire a click and expect it to happen
fireGesture();
expect(mockElement.on).toHaveBeenCalledWith(
"contextmenu",
jasmine.any(Function)
@@ -70,6 +96,34 @@ define(
mockDomainObject.calls
);
});
it("attaches a callback for context menu events on mobile", function () {
// Mock touch event and set to mobile device
mockTouchEvent = jasmine.createSpyObj("event", ["preventDefault", "touches"]);
mockTouch = jasmine.createSpyObj("touch", ["length"]);
mockTouch.length = 1;
mockTouchEvent.touches.andReturn(mockTouch);
mockAgentService.isMobile.andReturn(true);
// Then create new (mobile) gesture
gesture = new ContextMenuGesture(mockTimeout, mockAgentService, mockElement, mockDomainObject);
// Set calls for the touchstart and touchend gestures
fireTouchStartGesture = mockElement.on.calls[1].args[1];
fireTouchEndGesture = mockElement.on.mostRecentCall.args[1];
// Fire touchstart and expect touch start to begin
fireTouchStartGesture(mockTouchEvent);
expect(mockElement.on).toHaveBeenCalledWith(
"touchstart",
jasmine.any(Function)
);
// Expect timeout to begin and then fireTouchEnd
expect(mockTimeout).toHaveBeenCalled();
mockTimeout.mostRecentCall.args[0]();
fireTouchEndGesture(mockTouchEvent);
});
});
}
);