<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
	license agreements. See the NOTICE file distributed with this work for additional 
	information regarding copyright ownership. The ASF licenses this file to 
	you 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. -->

<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
	xmlns:g='urn:import:com.google.gwt.user.client.ui'>
	<ui:style type="org.apache.hupa.client.ui.NotificationView.Style">
		.textCenter {
			text-align: center;
		}
		
		.hideNotification {
			display: none;
		}
		
		.fontFeel {
<<<<<<< HEAD
<<<<<<< HEAD
			z-index: 9999;
=======
>>>>>>> add loading and notification bar(finishing the folder list click event), related to the issue#18
=======
			z-index: 9999;
>>>>>>> make a notification timer to be able to schedule the notice with millis time.
			position: relative;
			display: inline-block;
			border-color: #f0c36d;
			background-color: #f9edbe;
			padding: 3px 10px;
			border: 1px solid transparent;
			border-radius: 2px;
			-webkit-border-radius: 2px;
			-webkit-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
			box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
			color: black;
			font-weight: bold;
		}
		
		.notificationPosition {
			top: 10px;
		}
	</ui:style>
	<g:FlowPanel addStyleNames="{style.hideNotification} {style.textCenter}"
		ui:field="notificationContainer">
		<g:HTML addStyleNames="{style.fontFeel} {style.notificationPosition}"
			ui:field="notification" />
	</g:FlowPanel>
</ui:UiBinder>