1
0
mirror of https://github.com/sismics/docs.git synced 2025-12-21 05:31:42 +00:00

Edit document, add files, display files

This commit is contained in:
jendib
2013-07-28 01:07:04 +02:00
parent 9b74bd8194
commit 3a2ffec497
25 changed files with 1811 additions and 421 deletions

1
docs-web/src/main/webapp/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
/sismicsdocs

View File

@@ -18,16 +18,21 @@
<script src="lib/less.js" type="text/javascript"></script>
<script src="lib/underscore.js" type="text/javascript"></script>
<script src="lib/angular/angular.js" type="text/javascript"></script>
<script src="lib/angular/angular-sanitize.js" type="text/javascript"></script>
<script src="lib/angular.ui-router.js" type="text/javascript"></script>
<script src="lib/angular.ui-bootstrap.js" type="text/javascript"></script>
<script src="lib/angular.ui-utils.js" type="text/javascript"></script>
<script src="lib/angular.restangular.js" type="text/javascript"></script>
<script src="js/app.js" type="text/javascript"></script>
<script src="js/controller/Main.js" type="text/javascript"></script>
<script src="js/controller/Document.js" type="text/javascript"></script>
<script src="js/controller/DocumentEdit.js" type="text/javascript"></script>
<script src="js/controller/DocumentView.js" type="text/javascript"></script>
<script src="js/controller/FileView.js" type="text/javascript"></script>
<script src="js/controller/Login.js" type="text/javascript"></script>
<script src="js/service/User.js" type="text/javascript"></script>
<script src="js/filter/Newline.js" type="text/javascript"></script>
<script src="js/directive/File.js" type="text/javascript"></script>
</head>
<body>
<div class="navbar">

View File

@@ -3,7 +3,7 @@
/**
* Trackino application.
*/
var App = angular.module('docs', ['ui.state', 'ui.bootstrap', 'restangular'])
var App = angular.module('docs', ['ui.state', 'ui.bootstrap', 'ui.keypress', 'restangular', 'ngSanitize'])
/**
* Configuring modules.
@@ -22,6 +22,7 @@ var App = angular.module('docs', ['ui.state', 'ui.bootstrap', 'restangular'])
})
.state('document', {
url: '/document',
abstract: true,
views: {
'page': {
templateUrl: 'partial/document.html',
@@ -29,6 +30,14 @@ var App = angular.module('docs', ['ui.state', 'ui.bootstrap', 'restangular'])
}
}
})
.state('document.default', {
url: '',
views: {
'document': {
templateUrl: 'partial/document.default.html'
}
}
})
.state('document.add', {
url: '/add',
views: {
@@ -56,6 +65,18 @@ var App = angular.module('docs', ['ui.state', 'ui.bootstrap', 'restangular'])
}
}
})
.state('document.view.file', {
url: '/file/:fileId',
onEnter: function($stateParams, $state, $dialog) {
$dialog.dialog({
keyboard: true,
templateUrl: 'partial/file.view.html',
controller: 'FileView'
}).open().then(function(result) {
$state.transitionTo('document.view', { id: $stateParams.id });
});
}
})
.state('login', {
url: '/login',
views: {

View File

@@ -5,19 +5,61 @@
*/
App.controller('Document', function($scope, $state, Restangular) {
/**
* Load documents.
* Documents table sort status.
*/
$scope.loadDocuments = function() {
$scope.sortColumn = 3;
$scope.asc = false;
$scope.offset = 0;
$scope.currentPage = 1;
$scope.limit = 10;
/**
* Load new documents page.
*/
$scope.pageDocuments = function() {
Restangular.one('document')
.getList('list', {
offset: 0,
limit: 30
offset: $scope.offset,
limit: $scope.limit,
sort_column: $scope.sortColumn,
asc: $scope.asc
})
.then(function(data) {
$scope.documents = data.documents;
$scope.documents = data;
$scope.numPages = Math.ceil(data.total / $scope.limit);
});
};
/**
* Reload documents.
*/
$scope.loadDocuments = function() {
$scope.offset = 0;
$scope.currentPage = 1;
$scope.pageDocuments();
};
/**
* Watch for current page change.
*/
$scope.$watch('currentPage', function() {
$scope.offset = ($scope.currentPage - 1) * $scope.limit;
$scope.pageDocuments();
});
/**
* Sort documents.
*/
$scope.sortDocuments = function(sortColumn) {
if (sortColumn == $scope.sortColumn) {
$scope.asc = !$scope.asc;
} else {
$scope.asc = true;
}
$scope.sortColumn = sortColumn;
$scope.loadDocuments();
};
/**
* Go to add document form.
*/
@@ -25,10 +67,17 @@ App.controller('Document', function($scope, $state, Restangular) {
$state.transitionTo('document.add');
};
/**
* Go to edit document form.
*/
$scope.editDocument = function(id) {
$state.transitionTo('document.edit', { id: id });
};
/**
* Display a document.
*/
$scope.viewDocument = function(id) {
$state.transitionTo('document.view', { id: id });
};
// Initial documents loading
$scope.loadDocuments();
});

View File

@@ -3,7 +3,7 @@
/**
* Document edition controller.
*/
App.controller('DocumentEdit', function($scope, $state, $stateParams, Restangular) {
App.controller('DocumentEdit', function($scope, $http, $state, $stateParams, Restangular) {
/**
* Returns true if in edit mode (false in add mode).
*/
@@ -11,27 +11,65 @@ App.controller('DocumentEdit', function($scope, $state, $stateParams, Restangula
return $stateParams.id;
};
/**
* In edit mode, load the current document.
*/
if ($scope.isEdit()) {
Restangular.one('document', $stateParams.id).get().then(function(data) {
$scope.document = data;
});
}
/**
* Edit a document.
*/
$scope.edit = function() {
var promise = null;
if ($scope.isEdit()) {
// TODO
promise = Restangular
.one('document', $stateParams.id)
.post('', $scope.document);
promise.then(function(data) {
$scope.loadDocuments();
$state.transitionTo('document.view', { id: $stateParams.id });
})
} else {
Restangular
promise = Restangular
.one('document')
.put($scope.document)
.then(function() {
.put($scope.document);
promise.then(function(data) {
$scope.document = {};
$scope.loadDocuments();
});
}
// Upload files after edition
// TODO Handle file upload progression and errors
promise.then(function(data) {
_.each($scope.files, function(file) {
var formData = new FormData();
formData.append('id', data.id);
formData.append('file', file);
$.ajax({
url: 'api/file',
type: 'PUT',
data: formData,
processData: false,
contentType: false
});
});
});
};
/**
* Cancel edition.
*/
$scope.cancel = function() {
$state.transitionTo('document');
if ($scope.isEdit()) {
$state.transitionTo('document.view', { id: $stateParams.id });
} else {
$state.transitionTo('document.default');
}
};
});

View File

@@ -3,5 +3,17 @@
/**
* Document view controller.
*/
App.controller('DocumentView', function($scope, Restangular) {
App.controller('DocumentView', function($rootScope, $scope, $state, $stateParams, Restangular) {
// Load data from server
$scope.document = Restangular.one('document', $stateParams.id).get();
Restangular.one('file').getList('list', { id: $stateParams.id }).then(function(data) {
$rootScope.files = data.files;
});
/**
* Navigate to the selected file.
*/
$scope.openFile = function(file) {
$state.transitionTo('document.view.file', { id: $stateParams.id, fileId: file.id })
}
});

View File

@@ -0,0 +1,36 @@
'use strict';
/**
* File view controller.
*/
App.controller('FileView', function($rootScope, $state, $scope, $stateParams) {
$scope.id = $stateParams.fileId;
/**
* Navigate to the next file.
*/
$scope.nextFile = function() {
_.each($rootScope.files, function(value, key, list) {
if (value.id == $scope.id) {
var next = $rootScope.files[key + 1];
if (next) {
$state.transitionTo('document.view.file', { id: $stateParams.id, fileId: next.id });
}
}
});
};
/**
* Navigate to the previous file.
*/
$scope.previousFile = function() {
_.each($rootScope.files, function(value, key, list) {
if (value.id == $scope.id) {
var previous = $rootScope.files[key - 1];
if (previous) {
$state.transitionTo('document.view.file', { id: $stateParams.id, fileId: previous.id });
}
}
});
};
});

View File

@@ -6,7 +6,7 @@
App.controller('Login', function($scope, $state, $dialog, User) {
$scope.login = function() {
User.login($scope.user).then(function() {
$state.transitionTo('browse');
$state.transitionTo('document.default');
}, function() {
var title = 'Login failed';
var msg = 'Username or password invalid';

View File

@@ -8,7 +8,7 @@ App.controller('Main', function($scope, $state, User) {
if (data.anonymous) {
$state.transitionTo('login');
} else {
$state.transitionTo('document');
$state.transitionTo('document.default');
}
});
});

View File

@@ -0,0 +1,21 @@
'use strict';
/**
* File upload directive.
*/
App.directive('file', function() {
return {
restrict: 'E',
template: '<input type="file" />',
replace: true,
require: 'ngModel',
link: function(scope, element, attr, ctrl) {
var listener = function() {
scope.$apply(function() {
attr.multiple ? ctrl.$setViewValue(element[0].files) : ctrl.$setViewValue(element[0].files[0]);
});
}
element.bind('change', listener);
}
}
});

View File

@@ -0,0 +1,13 @@
'use strict';
/**
* Filter converting new lines in <br />
*/
App.filter('newline', function() {
return function(text) {
if (!text) {
return '';
}
return text.replace(/\n/g, '<br/>');
}
})

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,8 @@
<p class="lead">
{{ documents.total }} document{{ documents.total > 1 ? 's' : '' }} in the database
</p>
<blockquote class="pull-right">
<p>There seems to be a kind of order in the universe, in the movement of the stars and the turning of the earth and the changing of the seasons, and even in the cycle of human life. But human life itself is almost pure chaos. Everyone takes his stance, asserts his own rights and feelings, mistaking the motives of others, and his own.</p>
<small>Katherine Anne Porter</small>
</blockquote>

View File

@@ -1,18 +1,24 @@
<form class="form-horizontal">
<div class="control-group">
<form class="form-horizontal" name="documentForm">
<div class="control-group" ng-class="{ error: !documentForm.title.$valid }">
<label class="control-label" for="inputTitle">Title</label>
<div class="controls">
<input class="input-block-level" type="text" id="inputTitle" placeholder="Title" ng-model="document.title" />
<input required ng-maxlength="100" class="input-block-level" type="text" id="inputTitle" placeholder="Title" name="title" ng-model="document.title" />
</div>
</div>
<div class="control-group" ng-class="{ error: !documentForm.description.$valid }">
<label class="control-label" for="inputDescription">Description</label>
<div class="controls">
<textarea ng-maxlength="4000" class="input-block-level" rows="5" id="inputDescription" name="description" ng-model="document.description"></textarea>
</div>
</div>
<div class="control-group">
<label class="control-label" for="inputDescription">Description</label>
<label class="control-label" for="inputFiles">New files</label>
<div class="controls">
<textarea class="input-block-level" rows="5" id="inputDescription" ng-model="document.description"></textarea>
<file class="input-block-level" id="inputFiles" multiple="multiple" ng-model="files" accept="image/png,image/jpg,image/jpeg,image/gif" />
</div>
</div>
<div class="form-actions">
<button type="submit" class="btn btn-primary" ng-click="edit()">{{ isEdit() ? 'Edit' : 'Add' }}</button>
<button type="submit" class="btn btn-primary" ng-disabled="!documentForm.$valid" ng-click="edit()">{{ isEdit() ? 'Edit' : 'Add' }}</button>
<button type="submit" class="btn" ng-click="cancel()">Cancel</button>
</div>
</form>

View File

@@ -1,25 +1,28 @@
<div class="container-fluid">
<div class="row-fluid">
<div class="span5 well">
<div class="span4 well">
<p class="text-center">
<button class="btn btn-primary" type="button" ng-click="addDocument()">Add a document</button>
</p>
<table class="table table-striped table-hover">
<table class="table table-striped table-hover table-documents">
<thead>
<tr>
<th>Title</th>
<th>Creation date</th>
<th ng-click="sortDocuments(1)"><span class="icon-chevron-{{ sortColumn == 1 ? (asc ? 'down' : 'up') : '' }}"></span> Title</th>
<th ng-click="sortDocuments(3)"><span class="icon-chevron-{{ sortColumn == 3 ? (asc ? 'down' : 'up') : '' }}"></span> Creation date</th>
</tr>
</thead>
<tbody>
<tr ng-click="viewDocument(document.id)" ng-repeat="document in documents">
<tr ng-click="viewDocument(document.id)" ng-repeat="document in documents.documents">
<td>{{ document.title }}</td>
<td>{{ document.create_date | date: 'short' }}</td>
</tr>
</tbody>
</table>
<div class="text-center">
<pagination num-pages="numPages" max-size="5" current-page="currentPage"></pagination>
</div>
</div>
<div class="span7 well">
<div class="span8 well">
<div ui-view="document"></div>
</div>
</div>

View File

@@ -1 +1,26 @@
View doc
<div class="text-right">
<div class="btn-group">
<button class="btn btn-primary" ng-click="editDocument(document.id)"><span class="icon-pencil icon-white"></span> Edit</button>
</div>
</div>
<div class="page-header">
<h1>{{ document.title }} <small>{{ document.create_date | date: 'short' }}</small></h1>
</div>
<p ng-bind-html="document.description | newline"></p>
<ul class="thumbnails" ng-show="files.length > 0">
<li class="span2" ng-repeat="file in files" ng-style="{ 'margin-left': $index % 6 == 0 ? '0' : '' }">
<div class="thumbnail">
<a ng-click="openFile(file)">
<img ng-src="api/file/{{ file.id }}/data" tooltip="{{ file.mimetype }}" tooltip-placement="top" />
</a>
<div class="caption">
<p class="text-right">
<button class="btn btn-danger" ng-click="deleteFile(file.id)"><span class="icon-trash icon-white"></span></button>
</p>
</div>
</div>
</li>
</ul>

View File

@@ -0,0 +1,7 @@
<div class="text-center">
<div class="btn-group">
<button type="button" class="btn" ng-click="previousFile()">Previous</button>
<button type="button" class="btn" ng-click="nextFile()">Next</button>
</div>
</div>
<img ng-src="api/file/{{ id }}/data" />

View File

@@ -1,6 +1,5 @@
<div class="row-fluid">
<div class="span4 offset4">
<h1 class="text-center">Sismics Docs</h1>
<form class="form-horizontal">
<div class="control-group">
<label class="control-label" for="inputUsername">Username</label>

View File

@@ -1,310 +0,0 @@
27 Jul 2013 13:37:48,704 INFO com.sismics.util.jpa.EMF.getEntityManagerProperties(EMF.java:69) Configuring EntityManager from hibernate.properties
27 Jul 2013 13:37:49,155 INFO com.sismics.util.jpa.DbOpenHelper.open(DbOpenHelper.java:67) Opening database and executing incremental updates
27 Jul 2013 13:37:49,157 INFO com.sismics.util.jpa.DbOpenHelper.open(DbOpenHelper.java:95) Unable to get database version: Table T_CONFIG not found
27 Jul 2013 13:37:49,157 INFO com.sismics.util.jpa.DbOpenHelper.open(DbOpenHelper.java:109) Executing initial schema creation script
27 Jul 2013 13:37:49,159 ERROR com.sismics.util.jpa.DbOpenHelper.open(DbOpenHelper.java:122) Unable to complete schema update
java.lang.UnsupportedOperationException: Cannot list files for URL file:/C:/Users/Ben/workspace/bgd/docs/trunk/docs-core/target/classes/com/sismics/util/jpa/EMF$1.class
at com.sismics.util.ResourceUtil.list(ResourceUtil.java:86)
at com.sismics.util.jpa.DbOpenHelper.executeAllScript(DbOpenHelper.java:152)
at com.sismics.util.jpa.EMF$1.onCreate(EMF.java:45)
at com.sismics.util.jpa.DbOpenHelper.open(DbOpenHelper.java:110)
at com.sismics.util.jpa.EMF.<clinit>(EMF.java:55)
at com.sismics.docs.core.util.TransactionUtil.handle(TransactionUtil.java:38)
at com.sismics.util.filter.RequestContextFilter.init(RequestContextFilter.java:76)
at org.eclipse.jetty.servlet.FilterHolder.doStart(FilterHolder.java:114)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:754)
at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:258)
at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1221)
at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:699)
at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:454)
at org.mortbay.jetty.plugin.JettyWebAppContext.doStart(JettyWebAppContext.java:256)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
at org.eclipse.jetty.server.handler.HandlerCollection.doStart(HandlerCollection.java:224)
at org.eclipse.jetty.server.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:167)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
at org.eclipse.jetty.server.handler.HandlerCollection.doStart(HandlerCollection.java:224)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:90)
at org.eclipse.jetty.server.Server.doStart(Server.java:263)
at org.mortbay.jetty.plugin.JettyServer.doStart(JettyServer.java:65)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
at org.mortbay.jetty.plugin.AbstractJettyMojo.startJetty(AbstractJettyMojo.java:511)
at org.mortbay.jetty.plugin.AbstractJettyMojo.execute(AbstractJettyMojo.java:364)
at org.mortbay.jetty.plugin.JettyRunMojo.execute(JettyRunMojo.java:516)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
27 Jul 2013 13:37:49,162 INFO com.sismics.util.jpa.EMF.getEntityManagerProperties(EMF.java:69) Configuring EntityManager from hibernate.properties
27 Jul 2013 13:37:49,244 ERROR com.sismics.util.jpa.EMF.<clinit>(EMF.java:60) Error creating EMF
javax.persistence.PersistenceException: No Persistence provider for EntityManager named transactions-optional
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:69)
at com.sismics.util.jpa.EMF.<clinit>(EMF.java:57)
at com.sismics.docs.core.util.TransactionUtil.handle(TransactionUtil.java:38)
at com.sismics.util.filter.RequestContextFilter.init(RequestContextFilter.java:76)
at org.eclipse.jetty.servlet.FilterHolder.doStart(FilterHolder.java:114)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:754)
at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:258)
at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1221)
at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:699)
at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:454)
at org.mortbay.jetty.plugin.JettyWebAppContext.doStart(JettyWebAppContext.java:256)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
at org.eclipse.jetty.server.handler.HandlerCollection.doStart(HandlerCollection.java:224)
at org.eclipse.jetty.server.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:167)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
at org.eclipse.jetty.server.handler.HandlerCollection.doStart(HandlerCollection.java:224)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:90)
at org.eclipse.jetty.server.Server.doStart(Server.java:263)
at org.mortbay.jetty.plugin.JettyServer.doStart(JettyServer.java:65)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
at org.mortbay.jetty.plugin.AbstractJettyMojo.startJetty(AbstractJettyMojo.java:511)
at org.mortbay.jetty.plugin.AbstractJettyMojo.execute(AbstractJettyMojo.java:364)
at org.mortbay.jetty.plugin.JettyRunMojo.execute(JettyRunMojo.java:516)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
27 Jul 2013 13:37:49,245 ERROR com.sismics.docs.core.util.TransactionUtil.handle(TransactionUtil.java:40) Cannot create entity manager
java.lang.NullPointerException
at com.sismics.docs.core.util.TransactionUtil.handle(TransactionUtil.java:38)
at com.sismics.util.filter.RequestContextFilter.init(RequestContextFilter.java:76)
at org.eclipse.jetty.servlet.FilterHolder.doStart(FilterHolder.java:114)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:754)
at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:258)
at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1221)
at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:699)
at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:454)
at org.mortbay.jetty.plugin.JettyWebAppContext.doStart(JettyWebAppContext.java:256)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
at org.eclipse.jetty.server.handler.HandlerCollection.doStart(HandlerCollection.java:224)
at org.eclipse.jetty.server.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:167)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
at org.eclipse.jetty.server.handler.HandlerCollection.doStart(HandlerCollection.java:224)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:90)
at org.eclipse.jetty.server.Server.doStart(Server.java:263)
at org.mortbay.jetty.plugin.JettyServer.doStart(JettyServer.java:65)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
at org.mortbay.jetty.plugin.AbstractJettyMojo.startJetty(AbstractJettyMojo.java:511)
at org.mortbay.jetty.plugin.AbstractJettyMojo.execute(AbstractJettyMojo.java:364)
at org.mortbay.jetty.plugin.JettyRunMojo.execute(JettyRunMojo.java:516)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
27 Jul 2013 13:43:02,167 INFO com.sismics.util.jpa.EMF.getEntityManagerProperties(EMF.java:69) Configuring EntityManager from hibernate.properties
27 Jul 2013 13:43:02,621 INFO com.sismics.util.jpa.DbOpenHelper.open(DbOpenHelper.java:67) Opening database and executing incremental updates
27 Jul 2013 13:43:02,623 INFO com.sismics.util.jpa.DbOpenHelper.open(DbOpenHelper.java:95) Unable to get database version: Table T_CONFIG not found
27 Jul 2013 13:43:02,624 INFO com.sismics.util.jpa.DbOpenHelper.open(DbOpenHelper.java:109) Executing initial schema creation script
27 Jul 2013 13:44:01,672 ERROR com.sismics.util.jpa.DbOpenHelper.open(DbOpenHelper.java:122) Unable to complete schema update
java.lang.UnsupportedOperationException: Cannot list files for URL file:/C:/Users/Ben/workspace/bgd/docs/trunk/docs-core/target/classes/com/sismics/util/jpa/EMF$1.class
at com.sismics.util.ResourceUtil.list(ResourceUtil.java:86)
at com.sismics.util.jpa.DbOpenHelper.executeAllScript(DbOpenHelper.java:152)
at com.sismics.util.jpa.EMF$1.onCreate(EMF.java:45)
at com.sismics.util.jpa.DbOpenHelper.open(DbOpenHelper.java:110)
at com.sismics.util.jpa.EMF.<clinit>(EMF.java:55)
at com.sismics.docs.core.util.TransactionUtil.handle(TransactionUtil.java:38)
at com.sismics.util.filter.RequestContextFilter.init(RequestContextFilter.java:76)
at org.eclipse.jetty.servlet.FilterHolder.doStart(FilterHolder.java:114)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:754)
at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:258)
at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1221)
at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:699)
at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:454)
at org.mortbay.jetty.plugin.JettyWebAppContext.doStart(JettyWebAppContext.java:256)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
at org.eclipse.jetty.server.handler.HandlerCollection.doStart(HandlerCollection.java:224)
at org.eclipse.jetty.server.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:167)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
at org.eclipse.jetty.server.handler.HandlerCollection.doStart(HandlerCollection.java:224)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:90)
at org.eclipse.jetty.server.Server.doStart(Server.java:263)
at org.mortbay.jetty.plugin.JettyServer.doStart(JettyServer.java:65)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
at org.mortbay.jetty.plugin.AbstractJettyMojo.startJetty(AbstractJettyMojo.java:511)
at org.mortbay.jetty.plugin.AbstractJettyMojo.execute(AbstractJettyMojo.java:364)
at org.mortbay.jetty.plugin.JettyRunMojo.execute(JettyRunMojo.java:516)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
27 Jul 2013 13:44:01,677 INFO com.sismics.util.jpa.EMF.getEntityManagerProperties(EMF.java:69) Configuring EntityManager from hibernate.properties
27 Jul 2013 13:44:01,769 ERROR com.sismics.util.jpa.EMF.<clinit>(EMF.java:60) Error creating EMF
javax.persistence.PersistenceException: No Persistence provider for EntityManager named transactions-optional
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:69)
at com.sismics.util.jpa.EMF.<clinit>(EMF.java:57)
at com.sismics.docs.core.util.TransactionUtil.handle(TransactionUtil.java:38)
at com.sismics.util.filter.RequestContextFilter.init(RequestContextFilter.java:76)
at org.eclipse.jetty.servlet.FilterHolder.doStart(FilterHolder.java:114)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:754)
at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:258)
at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1221)
at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:699)
at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:454)
at org.mortbay.jetty.plugin.JettyWebAppContext.doStart(JettyWebAppContext.java:256)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
at org.eclipse.jetty.server.handler.HandlerCollection.doStart(HandlerCollection.java:224)
at org.eclipse.jetty.server.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:167)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
at org.eclipse.jetty.server.handler.HandlerCollection.doStart(HandlerCollection.java:224)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:90)
at org.eclipse.jetty.server.Server.doStart(Server.java:263)
at org.mortbay.jetty.plugin.JettyServer.doStart(JettyServer.java:65)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
at org.mortbay.jetty.plugin.AbstractJettyMojo.startJetty(AbstractJettyMojo.java:511)
at org.mortbay.jetty.plugin.AbstractJettyMojo.execute(AbstractJettyMojo.java:364)
at org.mortbay.jetty.plugin.JettyRunMojo.execute(JettyRunMojo.java:516)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
27 Jul 2013 13:44:01,770 ERROR com.sismics.docs.core.util.TransactionUtil.handle(TransactionUtil.java:40) Cannot create entity manager
java.lang.NullPointerException
at com.sismics.docs.core.util.TransactionUtil.handle(TransactionUtil.java:38)
at com.sismics.util.filter.RequestContextFilter.init(RequestContextFilter.java:76)
at org.eclipse.jetty.servlet.FilterHolder.doStart(FilterHolder.java:114)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:754)
at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:258)
at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1221)
at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:699)
at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:454)
at org.mortbay.jetty.plugin.JettyWebAppContext.doStart(JettyWebAppContext.java:256)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
at org.eclipse.jetty.server.handler.HandlerCollection.doStart(HandlerCollection.java:224)
at org.eclipse.jetty.server.handler.ContextHandlerCollection.doStart(ContextHandlerCollection.java:167)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
at org.eclipse.jetty.server.handler.HandlerCollection.doStart(HandlerCollection.java:224)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:90)
at org.eclipse.jetty.server.Server.doStart(Server.java:263)
at org.mortbay.jetty.plugin.JettyServer.doStart(JettyServer.java:65)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)
at org.mortbay.jetty.plugin.AbstractJettyMojo.startJetty(AbstractJettyMojo.java:511)
at org.mortbay.jetty.plugin.AbstractJettyMojo.execute(AbstractJettyMojo.java:364)
at org.mortbay.jetty.plugin.JettyRunMojo.execute(JettyRunMojo.java:516)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
27 Jul 2013 13:51:34,136 INFO com.sismics.util.jpa.EMF.getEntityManagerProperties(EMF.java:69) Configuring EntityManager from hibernate.properties
27 Jul 2013 13:51:34,600 INFO com.sismics.util.jpa.DbOpenHelper.open(DbOpenHelper.java:67) Opening database and executing incremental updates
27 Jul 2013 13:51:34,602 INFO com.sismics.util.jpa.DbOpenHelper.open(DbOpenHelper.java:95) Unable to get database version: Table T_CONFIG not found
27 Jul 2013 13:51:34,602 INFO com.sismics.util.jpa.DbOpenHelper.open(DbOpenHelper.java:109) Executing initial schema creation script
27 Jul 2013 13:51:48,941 INFO com.sismics.util.jpa.DbOpenHelper.executeAllScript(DbOpenHelper.java:163) Executing script: dbupdate-000-0.sql
27 Jul 2013 13:51:48,984 INFO com.sismics.util.jpa.DbOpenHelper.executeAllScript(DbOpenHelper.java:163) Executing script: dbupdate-000-1.sql
27 Jul 2013 13:51:48,987 INFO com.sismics.util.jpa.DbOpenHelper.open(DbOpenHelper.java:117) Found database version 0, new version is 1, executing database incremental update scripts
27 Jul 2013 13:51:50,951 INFO com.sismics.util.jpa.DbOpenHelper.open(DbOpenHelper.java:119) Database upgrade complete
27 Jul 2013 13:51:50,951 INFO com.sismics.util.jpa.EMF.getEntityManagerProperties(EMF.java:69) Configuring EntityManager from hibernate.properties
27 Jul 2013 13:51:51,824 INFO com.sismics.docs.core.service.IndexingService.startUp(IndexingService.java:53) Using file Lucene storage: C:\Users\Ben\workspace\bgd\docs\trunk\docs-web\src\main\webapp\sismicsdocs\lucene

View File

@@ -0,0 +1,144 @@
.table-documents {
thead th {
cursor: pointer;
width: 50%;
}
tbody tr {
cursor: pointer;
}
}
.touchpanview-wrap {
position:relative;
display:block;
overflow:hidden;
border:1px solid black;
}
.touchpanview-pan {
position:absolute;
top:0;
left:0;
display:block;
overflow:hidden;
}
.touchpanview-pan img {
position:absolute;
top:0;
left:0;
display:block;
}
.touchpanview-pin {
position:absolute;
top:0;
left:0;
display:block;
width: 36px;
height:36px;
background: url(touchpanview-pin.png) no-repeat;
text-indent: -99999px;
cursor:pointer;
-webkit-animation-fill-mode: both;
-moz-animation-fill-mode: both;
-ms-animation-fill-mode: both;
-o-animation-fill-mode: both;
animation-fill-mode: both;
-webkit-animation: 1s ease;
-moz-animation: 1s ease;
-ms-animation: 1s ease;
-o-animation: 1s ease;
animation: 1s ease;
-webkit-animation-name: touchpanviewPinBounceIn;
-moz-animation-name: touchpanviewPinBounceIn;
-ms-animation-name: touchpanviewPinBounceIn;
-o-animation-name: touchpanviewPinBounceIn;
animation-name: touchpanviewPinBounceIn;
}
@-webkit-keyframes touchpanviewPinBounceIn {
0% { opacity: 0; -webkit-transform: translateY(-2000px); }
60% { opacity: 1; -webkit-transform: translateY(30px); }
80% { -webkit-transform: translateY(-10px); }
100% { -webkit-transform: translateY(0); }
}
@-moz-keyframes touchpanviewPinBounceIn {
0% { opacity: 0; -moz-transform: translateY(-2000px); }
60% { opacity: 1; -moz-transform: translateY(30px); }
80% { -moz-transform: translateY(-10px); }
100% { -moz-transform: translateY(0); }
}
@-ms-keyframes touchpanviewPinBounceIn {
0% { opacity: 0; -ms-transform: translateY(-2000px); }
60% { opacity: 1; -ms-transform: translateY(30px); }
80% { -ms-transform: translateY(-10px); }
100% { -ms-transform: translateY(0); }
}
@-o-keyframes touchpanviewPinBounceIn {
0% { opacity: 0; -o-transform: translateY(-2000px); }
60% { opacity: 1; -o-transform: translateY(30px); }
80% { -o-transform: translateY(-10px); }
100% { -o-transform: translateY(0); }
}
@keyframes touchpanviewPinBounceIn {
0% { opacity: 0; transform: translateY(-2000px); }
60% { opacity: 1; transform: translateY(30px); }
80% { transform: translateY(-10px); }
100% { transform: translateY(0); }
}
.touchpanview-pin-center { border:1px solid red; }
.touchpanview-pin-topLeft {
border-top:1px solid red;
border-left:1px solid red;
}
.touchpanview-pin-topRight {
border-top:1px solid red;
border-right:1px solid red;
}
.touchpanview-pin-bottomLeft {
border-bottom:1px solid red;
border-left:1px solid red;
}
.touchpanview-pin-bottomRight {
border-bottom:1px solid red;
border-right:1px solid red;
}