Added:
chemistry/parts/trunk/sharepoint-projects/CMIS.Sharepoint2010.SiteAssets/CMIS.Sharepoint2010.SiteAssets/SiteAssets/library/library.js
URL:
http://svn.apache.org/viewvc/chemistry/parts/trunk/sharepoint-projects/CMIS.Sharepoint2010.SiteAssets/CMIS.Sharepoint2010.SiteAssets/SiteAssets/library/library.js?rev=1642272&view=auto
==============================================================================
---
chemistry/parts/trunk/sharepoint-projects/CMIS.Sharepoint2010.SiteAssets/CMIS.Sharepoint2010.SiteAssets/SiteAssets/library/library.js
(added)
+++
chemistry/parts/trunk/sharepoint-projects/CMIS.Sharepoint2010.SiteAssets/CMIS.Sharepoint2010.SiteAssets/SiteAssets/library/library.js
Fri Nov 28 08:44:28 2014
@@ -0,0 +1,2030 @@
+/**
+ * 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.
+ *
+ * Documents UI component based on the CMIS 1.1 JS Connector
+ *
+ * Developer(s): - Ben Chevallereau ([email protected] /
+ * [email protected])
+ *
+ * Version: 1.0 (06-27-2014)
+ *
+ * This JS library can be used to any CMIS 1.1 compliant repository.
+ */
+
+;
+(function($, window, document, undefined) {
+
+ // Plugin name
+ var pluginName = 'cmislibrary';
+
+ // Default options
+ var defaults = {
+ cmis : {
+ // Server URL
+ serverUrl : null,
+ // Server username
+ username : null,
+ // Server password
+ password : null,
+ // Session: can be provided or created by this library
(Optional)
+ session : null,
+ // Object ID of the root folder (Optional)
+ initObjectId : null,
+ // Path of the root folder (Optional)
+ initPath : null,
+ // Query to execute at the first loading (Optional)
+ initQuery : null,
+ // Upload Versioning State
+ uploadVersioningState : "major",
+ // Upload object type ID
+ uploadObjectTypeId : "cmis:document",
+ // Search Object Type ID
+ searchObjectTypeId : "cmis:document"
+ },
+ display : {
+ property : {},
+ type : {
+ "datetime" : function(value, data) {
+ return new Date(parseInt(value));
+ }
+ }
+ },
+ // Maximum number of items per page
+ maxItems : 20,
+ // Sort options
+ sort : {
+ field : "cmis:name",
+ order : "ASC"
+ },
+ // Load documents at the first loading
+ autoLoad : true,
+ // Display only checked out documents
+ showOnlyCheckedOutDocs : false,
+ // Don't display by default systemfolder and forum (Optional)
+ exludingFilter : [ "F:cm:systemfolder", "F:fm:forum" ],
+ // Mime-type with preview implementation
+ previewMIMETypes : [],
+ // Previewer options
+ previewOptions : {},
+ // Use messages for the communication between UI components
(Optional)
+ useMessages : false,
+ events : {
+ // Function called when the component is initialized
+ complete : function(library) {
+ // DO NOTHING
+ },
+ // Function called when a new line is added on the table
+ documentAdded : function(library, newItem, data) {
+ // DO NOTHING
+ }
+ }
+
+ };
+
+ // The actual plugin constructor
+ function Library(element, options) {
+ this.element = element;
+
+ this.options = $.extend(true, {}, defaults, options);
+
+ this._defaults = defaults;
+ this._name = pluginName;
+
+ this.init();
+ }
+
+ /**
+ * Get the path where JS files are stored
+ */
+ Library.prototype._getPath = function() {
+ var path = "";
+ $("script").each(function() {
+ var src = $(this).attr("src");
+ if (src) {
+ var fileName = src.slice(src.lastIndexOf("/") +
1);
+ if (fileName.lastIndexOf("?") != -1)
+ fileName = fileName.slice(0,
fileName.lastIndexOf("?"));
+ if (fileName === "library.js")
+ path = src.substring(0,
src.lastIndexOf("/"));
+ }
+ });
+ return path;
+ }
+
+ /**
+ * Initialisation method.
+ */
+ Library.prototype.init = function() {
+ var library = this;
+
+ // Register the UI component
+ library._register();
+
+ // Check if templates have been loaded or not
+ var body = $(this.element).closest("body");
+ if (body.find(".cmistemplates").length == 0)
+ $(body).append("<div class='cmistemplates'></div)");
+ var path = library._getPath();
+
+ // Load dynamically the file templates.html
+ body.find(".cmistemplates").load(path + "/template.html", null,
function complete(responseText, textStatus, jqXHR) {
+ // Load the main component
+
$(library.element).html($(".cmistemplates").find("#cmis-library-template").html());
+
+ // Create the header
+ var header = $("#cmis-library-header-template").html();
+
$(library.element).find(".tableHeader").append($(header));
+
+ // Create the Drag&Drop zone
+ jQuery.event.props.push('dataTransfer');
+ var ddarea = $(library.element).find("#filedrag");
+
+ // Bind events for the d&d zone
+ ddarea.bind('dragenter dragover', false).bind('drop',
function(e) {
+ e.stopPropagation();
+ e.preventDefault();
+
+ // Upload each one of the dropped file
+ jQuery.each(e.dataTransfer.files,
function(index, file) {
+ var refresh = index ==
e.dataTransfer.files.length - 1;
+ library._uploadFile(file.name, file,
file.type, refresh);
+ });
+ });
+
+ // Configure the upload button
+ $(".uploadarea .uploadform input").bind('change',
function(e) {
+ var files = e.target.files;
+
+ // Upload each one of selected fiels
+ jQuery.each(files, function(index, file) {
+ var refresh = index == files.length - 1;
+ library._uploadFile(file.name, file,
file.type, refresh);
+ });
+ $(".uploadarea .uploadform input").val("");
+ });
+
+ // Configure the "Add Document" button
+
$(library.element).find(".addDocument").click(function() {
+ if
($(library.element).find(".uploadarea").css("display") == "table")
+
$(library.element).find(".uploadarea").css("display", "block");
+
$(library.element).find(".uploadarea").slideToggle(200, function() {
+ if
($(library.element).find(".uploadarea").css("display") == "block")
+
$(library.element).find(".uploadarea").css("display", "table");
+ });
+ });
+
+ // Configure the "Search" button
+
$(library.element).find("#queryButton").click(function() {
+ library._onClickSearch();
+ });
+
$(library.element).find("#queryValue").keypress(function(event) {
+ if (event.which == 13) {
+ event.preventDefault();
+ library._onClickSearch();
+ }
+ });
+
$(library.element).find("#queryValue").focusin(function(event) {
+ $(library.element).find(".query
.advanced-search").fadeIn();
+ });
+
$(library.element).find("#queryValue").focusout(function(event) {
+ $(library.element).find(".query
.advanced-search").fadeOut();
+ });
+ $(library.element).find("#queryClean").click(function()
{
+ // Save the current state
+ library.options.search_mode = false;
+ // Refresh the list of documents
+ var folderId =
$(library.element).attr("previousId");
+ library._displayChildren(null, folderId);
+ });
+
+ // Configure the Advanced search part
+ var advancedSearch = $(library.element).find(".query
.advanced-search");
+ var templates =
$(".cmis-library-advanced-search-template");
+ if (templates.length == 0)
+ $(advancedSearch).remove();
+ else {
+ $(advancedSearch).append("<div
class='title'>Search for...</div>");
+ $(templates).each(function(item, form) {
+ var title = $(form).attr("title");
+ $(advancedSearch).append("<div
class='type'>" + title + "</div>");
+
+
$(advancedSearch).find(".type:contains('" + title + "')").click(function() {
+ // Configure the click option
+
library._onClickAdvancedSearchForm(form);
+ });
+ });
+ }
+
+ // Configure the table header
+ $(library.element).find(".cmis-library-header
td.sortable").each(function(index, column) {
+ // Get the column name
+ var columnName = $(column).html();
+
+ // Update the column header
+ $(column).html("<div class='header-name'>" +
columnName + "</div><div class='sort-icon'></div>");
+
+ // Configure click actions
+
$(column).find(".header-name,.sort-icon").click(function() {
+ library._onClickSort(this);
+ });
+ });
+
+ // Attach keypress event on the login form
+ $(library.element).find(".login
input").keypress(function(e) {
+ if (e.which === 13) {
+ e.preventDefault();
+ $(library.element).find(".login
#login").click();
+ }
+ });
+
+ // Attach the login action
+ $(library.element).find(".login
#login").click(function() {
+ library._onClickLogin();
+ });
+
+ // Attach the login action
+ $(library.element).find(".action-header
.logout").click(function() {
+ library._onClickLogout();
+ });
+
+ // Call the complete function
+ if (library.options.events.complete != null)
+ library.options.events.complete(library);
+
+ library._preload();
+
+ });
+ };
+
+ /**
+ * Try to preload authentication configuration
+ */
+ Library.prototype._preload = function() {
+ var library = this;
+ var authenticated = false;
+
+ // We check if credentials have been provided
+ if (library.options.cmis.username != null &&
library.options.cmis.username.length > 0 && library.options.cmis.password !=
null && library.options.cmis.password.length > 0)
+ authenticated = true;
+
+ if (!authenticated) {
+ // We check if credentials have been stored somewhere
+ library._retrieveCredentials(function() {
+
+ if (library.options.cmis.username != null &&
library.options.cmis.username.length > 0 && library.options.cmis.password !=
null && library.options.cmis.password.length > 0) {
+ // Broadcast message
+ library._broadcastMessage("cmis-login",
library.options.cmis.username + ":" + library.options.cmis.password);
+
+ // Mark the connection as authenticated
+ authenticated = true;
+ }
+
+ // Check if credentials are filled
+ if (!authenticated) {
+ // Display the login popup
+
$(library.element).find(".login").fadeIn();
+ } else {
+ // Display the library
+
$(library.element).find(".library").fadeIn();
+ // Load the document list
+ library._load();
+ }
+
+ // Refresh the user actions
+ library._refreshUserActions();
+
+ });
+ } else {
+ // Display the library
+ $(library.element).find(".library").fadeIn();
+ // Load the document list
+ library._load();
+ }
+
+ }
+
+ /**
+ * Register the UI component to allow communication between components.
+ */
+ Library.prototype._register = function() {
+ var library = this;
+
+ // By default, events are registered in jQuery
+ var container = $;
+
+ // If the component is stored in an Iframe
+ if (top != self) {
+ // Create the container object that will be local to
this component
+ container = new Object();
+ // Identify that we'll use messages to communicate
+ library.useMessages = true;
+
+ // Define the listener used for messages
+ function listener(event) {
+ console.log("Received event: " + event.data);
+ // Get event information
+ var eventData = JSON.parse(event.data);
+ if (library.register.cmis.components)
+ // For each component
+
$(library.register.cmis.components).each(function() {
+ // If this component has a
subscribe event
+ if
(this.subscribe[eventData.name])
+ // Call the function
related to this event
+
this.subscribe[eventData.name](eventData.params[0])
+ });
+ }
+
+ // Register listener to be able to receive messages
+ if (window.addEventListener) {
+ addEventListener("message", listener, false)
+ } else {
+ attachEvent("onmessage", listener)
+ }
+ }
+
+ // Initialize the component
+ if (container.cmis == null)
+ container.cmis = new Object();
+
+ if (container.cmis.components == null)
+ container.cmis.components = new Array();
+ // Declare this component
+ container.cmis.components.push({
+ type : 'library',
+ // This component will trigger 3 kinds of event
+ events : [ 'cmis-deleteChildren', 'cmis-login',
'cmis-logout' ],
+ subscribe : {
+ // The browser component will receive 3 kind of
events
+ "cmis-clickFolder" : function(folderId) {
+ if (library.options.cmis.session)
+ // Refresh the list of nodes
+ library._displayChildren(null,
folderId);
+ },
+ "cmis-createFolder" : function(folderId) {
+ if (library.options.cmis.session)
+ // Refresh the list of nodes
+ library._displayChildren(null,
folderId);
+ },
+ "cmis-deleteFolder" : function(folderId) {
+ if (library.options.cmis.session)
+ // Refresh the list of nodes
+ library._displayChildren(null,
folderId);
+ },
+ "cmis-editFolder" : function(folderId) {
+ if (library.options.cmis.session)
+ // Refresh the list of nodes
+ library._displayChildren(null,
folderId);
+ },
+ "cmis-getCheckedOutDocs" : function() {
+ // Get all checked out documents in the
repository
+ var session =
library.options.cmis.session;
+ if (session)
+ session.getCheckedOutDocs(null,
{
+ includeAllowableActions
: true,
+ request : {
+ success :
function(data) {
+ //
Display the result of the query
+
library._displayQueryResult(data.objects);
+ },
+ error :
function(jqXHR, textStatus, errorThrown) {
+ //
Display an error
+
library._addError("Can't get checked out documents.");
+ }
+ }
+ });
+ }
+ }
+ });
+
+ // Store the container
+ library.register = container;
+ };
+
+ /**
+ * Function called to upload a file in the repository
+ *
+ * @fileName: File name used for the storing in the repository.
+ * @file: HTML5 File that will be uploaded
+ * @mimetype: Mimetype of the document to upload
+ * @refresh: Should refresh the document list
+ */
+ Library.prototype._uploadFile = function(fileName, file, mimetype,
refresh) {
+ var library = this;
+ var session = library.options.cmis.session;
+
+ // Get the folder ID of the current library
+ var folderId =
$(library.element).closest(".cmislibrary").attr("id");
+
+ // Create input properties
+ var input = {
+ "cmis:name" : fileName,
+ "cmis:objectTypeId" :
library.options.cmis.uploadObjectTypeId
+ };
+
+ // Create the document
+ session.createDocument(folderId, file, input, mimetype,
library.options.cmis.uploadVersioningState, null, null, null, {
+ request : {
+ success : function(data) {
+ if (refresh)
+ // Refresh the list of documents
+ library._refresh();
+ },
+ error : function(e) {
+ // Display an error
+ library._addError("Impossible to upload
the file: " + fileName);
+ }
+ }
+ });
+ };
+
+ /**
+ * Load the document list component
+ */
+ Library.prototype._load = function() {
+ var library = this;
+
+ // If the component is correctly cofnigured
+ if (null === this.options.cmis.serverUrl || (null ==
this.options.cmis.username && null == this.options.cmis.password && null ==
this.options.cmis.token)) {
+ this._addError("Please configure the browser before to
initialize it.");
+ } else {
+ // Test if the session already exists
+ if (null == this.options.cmis.session) {
+ // Initialize the session
+ var session =
cmis.createSession(this.options.cmis.serverUrl);
+ if (null == this.options.cmis.token)
+
session.setCredentials(this.options.cmis.username, this.options.cmis.password);
+ else
+
session.setToken(this.options.cmis.token);
+ session.loadRepositories({
+ request : {
+ success : function(data) {
+ // Save the current
session
+
library.options.cmis.session = session;
+ if
(library.options.autoLoad)
+ // Display the
list of docuents
+
library._displayDocuments();
+ },
+ error : function(jqXHR,
textStatus, errorThrown) {
+ // Display an error
+ var msg = "Error during
the connexion: ";
+ if (null != textStatus)
+ msg +=
textStatus;
+ library._addError(msg);
+ }
+ }
+ });
+ } else
+ // If the session already exists, just display
the list of
+ // documents
+ this._displayDocuments();
+ }
+ };
+
+ /**
+ * Display the list of documents
+ */
+ Library.prototype._displayDocuments = function() {
+ var session = this.options.cmis.session;
+ var library = this;
+
+ // Refresh the table header
+ library._refreshTableHeader();
+
+ // Display the document list
+ $(library.element).find(".library div.documentlist").fadeIn();
+
+ // Show only checked-out documents
+ if (this.options.showOnlyCheckedOutDocs) {
+
+ // Get all checked out documents in the repository
+ session.getCheckedOutDocs(null, {
+ includeAllowableActions : true,
+ request : {
+ success : function(data) {
+ // Display the result of the
query
+
library._displayQueryResult(data.objects);
+ },
+ error : function(jqXHR, textStatus,
errorThrown) {
+ // Display an error
+ library._addError("Can't get
checked out documents.");
+ }
+ }
+ });
+
+ // Load by using the query option
+ } else if (null != this.options.cmis.initQuery) {
+
+ // Query the repository
+ session.query(this.options.cmis.initQuery, false, {
+ includeAllowableActions : true,
+ request : {
+ success : function(data) {
+ // Display the result of the
query
+
library._displayQueryResult(data.results);
+ },
+ error : function(jqXHR, textStatus,
errorThrown) {
+ // Display an error
+ library._addError("Can't
execute the query " + this.options.cmis.initQuery + ".");
+ }
+ }
+ });
+
+ // Load by using the path option
+ } else if (null != this.options.cmis.initPath) {
+
+ // Get the object related to this path
+ session.getObjectByPath(this.options.cmis.initPath, {
+ includeAllowableActions : true,
+ request : {
+ success : function(data) {
+ // Display children of this
specific folder
+ library._displayChildren(null,
data.properties["cmis:objectId"].value);
+ },
+ error : function(jqXHR, textStatus,
errorThrown) {
+ // Display an erro
+ library._addError("Can't get
the object " + this.options.cmis.initPath + " in the repository.");
+ }
+ }
+ });
+
+ } else {
+ // Define the object ID as the root folder
+ var rootFolderId =
session.defaultRepository.rootFolderId;
+
+ // Load by using the object ID
+ if (null != this.options.cmis.initObjectId)
+ rootFolderId = this.options.cmis.initObjectId;
+
+ // Display children of this specific folder
+ this._displayChildren(null, rootFolderId);
+ }
+ };
+
+ /**
+ * Refresh the document list
+ */
+ Library.prototype._refresh = function() {
+ var library = this;
+
+ // If we are in "search" mode
+ if (library.options.search_mode) {
+ library._onClickSearch(null, library.options.query);
+ } else
+ // Display the list of nodes in the current folder used
+ library._displayChildren(null,
$(this.element).attr("id"));
+ }
+
+ /**
+ * Refresh table columns headers
+ *
+ */
+ Library.prototype._refreshTableHeader = function() {
+ var library = this;
+
+ // If sort options have been defined
+ if (library.options.sort != null) {
+ var field = library.options.sort.field;
+ var order = library.options.sort.order;
+
+ // If the field is not null
+ if (field != null) {
+ // Remove sort icon
+ $(library.element).find(".cmis-library-header
td.cmis-library-cell.sortable .sort-icon").removeClass("sort-descending-icon");
+ $(library.element).find(".cmis-library-header
td.cmis-library-cell.sortable .sort-icon").removeClass("sort-ascending-icon");
+
+ // Search the column header with the right field
+ var fieldEl =
$(library.element).find(".cmis-library-header
td.cmis-library-cell.sortable[field='" + field + "']");
+ // If the column header exists
+ if (fieldEl.length > 0) {
+ var icon =
$(fieldEl).find(".sort-icon");
+
+ if (order == "ASC")
+
$(icon).addClass("sort-ascending-icon");
+ else if (order == "DESC")
+
$(icon).addClass("sort-descending-icon");
+ }
+ }
+ }
+ }
+
+ /**
+ * Refresh user actions on the top menu
+ */
+ Library.prototype._refreshUserActions = function() {
+ var library = this;
+
+ // Display username
+ if (typeof library.options.cmis.username !== "undefined" &&
library.options.cmis.username != null) {
+ $(library.element).find(".action-header .welcome
.username").html(" " + library.options.cmis.username);
+ }
+ }
+
+ /**
+ * Show/Hide the upload panel depending of the user permissions
+ */
+ Library.prototype._refreshUploadPanel = function() {
+ var session = this.options.cmis.session;
+ var library = this;
+ // Save the folder id on the component
+ var folderId = $(library.element).attr("id");
+
+ session.getObject(folderId, "latest", {
+ includeAllowableActions : true,
+ request : {
+ success : function(data) {
+ if
(data.allowableActions["canCreateDocument"])
+
$(library.element).find(".uploadDocument").fadeIn();
+ else
+
$(library.element).find(".uploadDocument").fadeOut();
+ },
+ error : function(jqXHR, textStatus,
errorThrown) {
+ // Display an error message
+ library._addError("Can't get the object
" + folderId + " in the repository.");
+ }
+ }
+ });
+ }
+
+ /**
+ * Display a list of nodes
+ *
+ * @folderId: ID of the folder that contains nodes
+ * @pageIndex: Index of the page to display
+ */
+ Library.prototype._displayChildren = function(pageIndex, folderId) {
+ var session = this.options.cmis.session;
+ var library = this;
+
+ // Save the folder id on the component
+ $(library.element).attr("id", folderId);
+
+ // Hide all panels
+ $(library.element).find(".library div.panel").fadeOut();
+
+ // Refresh the upload documents panel
+ $(library.element).find(".action-header").fadeIn();
+ library._refreshUploadPanel();
+
+ // Refresh the table header
+ library._refreshTableHeader();
+
+ // Delete the no document warning
+ $(library.element).find(".noDocument").hide();
+
+ // Save the current state
+ library.options.search_mode = false;
+
+ // Hide the list of actions
+ $(library.element).find(".more-actions-popup").fadeOut();
+
+ if (session) {
+ $(library.element).find("#overlay").fadeIn(400,
function() {
+
+ // Clean the list of files in the table
+ var list =
$(library.element).find(".tableBody");
+ $(list).empty();
+
+ // Delete the pagination
+ $(library.element).find(".pagination").remove();
+
+ // Compute the page index
+ if (pageIndex == null || pageIndex == NaN)
+ pageIndex = 1;
+
+ // Store the current page
+ $(library.element).attr("currentPage",
pageIndex);
+
+ // Compute the maximum number of items
+ var maxItems =
parseInt(library.options.maxItems);
+ if (maxItems < 1 || isNaN(maxItems))
+ maxItems = 20;
+
+ // Get the order by instruction
+ var orderBy = "cmis:baseTypeId DESC,cmis:name";
+ if (library.options.sort != null) {
+ var field = library.options.sort.field;
+ var order = library.options.sort.order;
+
+ if (field != null)
+ orderBy = field + " " + order;
+ }
+
+ // Get children of the current folder
+ session.getChildren(folderId, {
+ includeAllowableActions : true,
+ skipCount : (pageIndex - 1) * maxItems,
+ maxItems : maxItems,
+ orderBy : orderBy,
+ request : {
+ success : function(data) {
+ // Clean and hide
elements
+
$(library.element).find("#queryValue").val("");
+
$(library.element).find("#queryClean").hide();
+
+ // If there is no
documents
+ if (data.objects.length
== 0) {
+ if
($(library.element).find(".noDocument").length == 0)
+
$(list).closest(".documentlist .table").after("<div class='noDocument'>There is
no document in this folder");
+ else
+
$(library.element).find(".noDocument").show();
+ } else {
+ // For each node
+
$(data.objects).each(function(index) {
+ //
Append a new item in the table
+
library._appendItem(list, this.object);
+ });
+ // Append the
pagination block
+
library._appendPagination(data.hasMoreItems, data.numItems, "_displayChildren");
+ }
+
+ // Display the document
list
+
$(library.element).find(".library div.documentlist").fadeIn();
+
$(library.element).find("#overlay").fadeOut();
+ },
+ error : function(jqXHR,
textStatus, errorThrown) {
+ // Display an error
message
+
library._addError("Can't get the children from the object " + folderId + " in
the repository.");
+
$(library.element).find(".library div.documentlist").fadeIn();
+
$(library.element).find("#overlay").fadeOut();
+ }
+ }
+ });
+ });
+ }
+
+ };
+
+ /**
+ * Display the result of a query
+ *
+ * @items: Array of nodes to display
+ */
+ Library.prototype._displayQueryResult = function(items) {
+ var session = this.options.cmis.session;
+ var library = this;
+
+ // Refresh the table header
+ library._refreshTableHeader();
+
+ // Delete the no document warning
+ $(library.element).find(".noDocument").hide();
+
+ // Save the previous folder Id
+ $(library.element).attr("previousId",
$(library.element).attr("id"));
+ $(library.element).attr("id", null);
+
+ // Hide the addDocument part
+ $(library.element).find(".uploadDocument").hide();
+
+ // Show the clean search
+ $(library.element).find("#queryClean").show();
+
+
$(library.element).find(".documentlist,.advanced-search-form").fadeOut(400).promise().done(function()
{
+
+ // Clean the list of files in the table
+ var list = $(library.element).find(".tableBody");
+ $(list).empty();
+
+ // If the list is empty
+ if (items.length == 0)
+ if
($(library.element).find(".noDocument").length == 0)
+ $(list).closest(".documentlist
.table").after("<div class='noDocument'>There is no document matching this
query.");
+ else
+
$(library.element).find(".noDocument").show();
+ else {
+ // For each node
+ $(items).each(function(index) {
+ // Append a new item in the table
+ library._appendItem(list, this);
+ });
+ }
+
+ $(library.element).find(".documentlist").fadeIn();
+ $(library.element).find("#overlay").fadeOut();
+ });
+ };
+
+ /**
+ * Append an item in the document list table.
+ *
+ * @list: HTML Document List
+ * @data: New item to add to the list
+ */
+ Library.prototype._appendItem = function(list, data) {
+ var library = this;
+
+ // Check the type
+ if
(this.options.exludingFilter.indexOf(data.properties["cmis:objectTypeId"].value)
== -1) {
+ // Generate HTML
+ var newItem = library._generateElement(data,
$("#cmis-library-row-template"));
+
+ // Append HTMl
+ $(list).append(newItem);
+
+ // Attach actions
+ library._attachActions(newItem);
+
+ // Call event
+ if (library.options.events.documentAdded != null)
+ library.options.events.documentAdded(library,
newItem, data);
+ }
+ };
+
+ /**
+ * Append the pagination block to the document list
+ *
+ * @hasMoreItems: Equals to true if there is more items
+ * @numItems: Number of items displayed
+ */
+ Library.prototype._appendPagination = function(hasMoreItems, numItems,
func) {
+ var library = this;
+ // Append the pagination block
+ $(library.element).find(".documentlist").append('<div
class="pagination"><div class="label">Page(s): </div></div>');
+
+ // Compute the number of items per page
+ var maxItems = parseInt(library.options.maxItems);
+ if (maxItems < 1 || isNaN(maxItems))
+ maxItems = 20;
+
+ // Compute the number of page
+ var nbOfPages = Math.ceil(numItems / maxItems);
+
+ // Add each page to the pagination
+ for (var i = 1; i <= nbOfPages; i++) {
+ $(library.element).find(".documentlist
.pagination").append('<div class="page" pageIndex="' + i + '">' + i + '</div>');
+ }
+
+ // Add event listener on each page
+ $(library.element).find(".documentlist .pagination
.page").click(function(e) {
+ // Get the page index
+ var pageIndex = parseInt($(e.currentTarget).html());
+ // Add click event
+ library._onPageClick(pageIndex, func);
+ });
+
+ // Higlight the currentPage
+ var currentPage = $(library.element).attr("currentPage");
+ if (currentPage == null)
+ currentPage = 1;
+ $(library.element).find(".documentlist .pagination
.page[pageIndex='" + currentPage + "']").addClass("highlight");
+ };
+
+ /**
+ * Event handler when a page in the pagination block is clicked
+ *
+ * @pageIndex: Index of the page to display
+ */
+ Library.prototype._onPageClick = function(pageIndex, func) {
+ var library = this;
+ // Get the ID of the folder currently used
+ var folderId =
$(library.element).closest(".cmislibrary").attr("id");
+ // Call the right function
+ library[func](pageIndex, folderId);
+ };
+
+ /**
+ * Event handler when the user click on the column header to sort
documents
+ *
+ * @elem: Elem clicke by the user
+ */
+ Library.prototype._onClickSort = function(elem) {
+ var library = this;
+ var column = $(elem).closest("td.sortable");
+ var field = $(column).attr("field");
+ var order = null;
+ if (library.options.sort != null)
+ order = library.options.sort.order;
+ if (order == null || order == "ASC")
+ order = "DESC";
+ else if (order == "DESC")
+ order = "ASC";
+
+ // Update the library
+ if (library.options.sort == null)
+ library.options.sort = new Object();
+
+ // If the sort field doesn't change
+ if (library.options.sort.field == field)
+ // We just update the sort order
+ library.options.sort.order = order;
+ else
+ // We just update the field order
+ library.options.sort.field = field;
+
+ // Refresh the document library
+ library._refresh();
+ };
+
+ /**
+ * Event handler when the delete icon is clicked
+ *
+ * @icon: Icon clicked
+ */
+ Library.prototype._onClickDeleteDocument = function(icon) {
+ var session = this.options.cmis.session;
+ var library = this;
+
+ // Get the row containing the icon
+ var row = $(icon).closest("tr.cmis-library-row");
+
+ var objectId;
+ // If the user clicked on the icon in the document list
+ if (row.length > 0) {
+ if ($(row).attr('versionSeriesId').length == 0)
+ objectId = $(row).attr('id');
+ else
+ objectId = $(row).attr('versionSeriesId');
+ } else {
+ // We clicked on the icon in the detailed view
+ objectId =
$(icon).closest(".detail-actions").attr('versionSeriesId');
+ }
+
+ $(library.element).find("#overlay").fadeIn(400, function() {
+ // Delete the object in the repository
+ session.deleteObject(objectId, true, {
+ request : {
+ complete : function(e, textStatus,
errorThrown) {
+ if (e.status == 200) {
+
+ // Refresh the list of
nodes
+ library._refresh();
+
+ // Broadcast
+
library._broadcastMessage("cmis-deleteChildren", $(library.element).attr("id"));
+
+ // Go back to the
document list if the user clicked
+ // on the delete icon
on the detailed view
+ if
($(library.element).find(".documentlist:visible").length == 0) {
+
$(library.element).find(".documentdetail").fadeOut(400, function() {
+
$(library.element).find(".action-header").fadeIn();
+
$(library.element).find(".documentlist").fadeIn(400, function() {
+
$(library.element).find("#overlay").fadeOut();
+ })
+ });
+ }
+ } else {
+ // Add an error
+
library._addError("Can't delete the object " + row.id + ".");
+
$(library.element).find("#overlay").fadeOut();
+ }
+ }
+ }
+ });
+ });
+ };
+
+ /**
+ * Event handler when the user clicks on the preview icon
+ *
+ * @icon: Preview icon
+ */
+ Library.prototype._onClickPreviewDocument = function(icon) {
+ var library = this;
+ var session = library.options.cmis.session;
+
+ // Get the row containing the icon
+ var row = $(icon).closest("tr.cmis-library-row");
+ // Get the ObjectID
+ var objectId = $(row).attr('versionSeriesId');
+ // Get the file name
+ var fileName = $(row).find('td.cmis-name').html();
+
+ // Hide the list of actions
+ $(library.element).find(".more-actions-popup").fadeOut();
+
+ // Compute the dimension of the previewers
+ var width = $(library.element).find(".documentlist").width();
+ var height = $(library.element).find(".documentlist").height();
+ if (height < 550)
+ height = 550;
+ var documentUrl = session.getContentStreamURL(objectId,
'latest', true);
+
+ // Compute the list of headers required by the previewer
+ var headers = {};
+ if ($.ajaxSettings.headers != null)
+ headers =
JSON.parse(JSON.stringify($.ajaxSettings.headers));
+ if (session.getToken() != null) {
+ // Append the token at the document URL
+ var tokenName = Object.keys(session.getToken())[0];
+ var tokenValue = session.getToken()[tokenName];
+ documentUrl += "&" + tokenName + "=" + tokenValue;
+ } else {
+ var hash = btoa(session.getCredentials());
+ headers["Authorization"] = "Basic " + hash;
+ }
+
+ // Create the previewer URL
+ var path = 'Viewer.js/';
+ var mimetype = $(row).attr("mimetype");
+ if (typeof library.options.previewOptions !== undefined &&
library.options.previewOptions[mimetype] != null) {
+ if (library.options.previewOptions[mimetype].viewerPath
!= null)
+ path =
library.options.previewOptions[mimetype].viewerPath;
+ }
+
+ var _url = path + 'index.aspx#' + JSON.stringify(headers) +
"||" + documentUrl + "&" + fileName.slice(fileName.lastIndexOf('.'));
+
+ // Append the previewer
+ $(library.element).find(".documentpreview").empty();
+ $(library.element).find(".documentpreview").append('<div
enabled="true" class="icon icon-back icon-back-documents">Back to documents
list</div>');
+ $(library.element).find(".documentpreview").append("<iframe
id='viewer' src = '" + _url + "' width='" + width + "' height='" + height + "'
allowfullscreen webkitallowfullscreen></iframe>")
+
+ // Show the previewer
+ $(library.element).find(".action-header").fadeOut();
+ $(library.element).find(".documentlist").fadeOut(400,
function() {
+ $(library.element).find(".documentpreview").fadeIn(400,
function() {
+
+ });
+ });
+
+ // Attach an event to the "Back to document" icon
+ $(library.element).find(".documentpreview
.icon-back-documents").click(function() {
+
$(library.element).find(".documentpreview").fadeOut(400, function() {
+
$(library.element).find(".action-header").fadeIn();
+
$(library.element).find(".documentlist").fadeIn();
+ });
+ });
+ };
+
+ /**
+ * Event handler when the user clicks on the versions icon
+ *
+ * @icon: Show versions icon
+ */
+ Library.prototype._onClickCheckVersions = function(icon) {
+ var library = this;
+
+ // Get the row containing the icon
+ var row = $(icon).closest("tr.cmis-library-row");
+ var objectId;
+ var container;
+ // If the user clicked on the icon in the document list
+ if (row.length > 0) {
+ container = $(library.element).find(".documentlist");
+ objectId = $(row).attr('versionSeriesId');
+ } else {
+ // We clicked on the icon in the detailed view
+ objectId =
$(icon).closest(".detail-actions").attr('versionSeriesId');
+ container = $(library.element).find(".documentdetail");
+ }
+
+ var session = this.options.cmis.session;
+
+ $(library.element).find("#overlay").fadeIn(400, function() {
+ $(library.element).find(".action-header").fadeOut();
+ $(container).fadeOut(400, function() {
+
+ // Get all versions of this node
+ session.getAllVersions(objectId, {
+ includeAllowableActions : true,
+ request : {
+ success : function(data) {
+ // Display each verions
+
$(library.element).find(".documentversion").empty();
+
library._displayVersions(data);
+
+ // Create the back
action template depending if the
+ // user is on the
"Documents" view or "Document
+ // Detail" view
+ var backActionTpl;
+ if
($(container).hasClass("documentdetail"))
+ backActionTpl =
$('<div><div class="detail-actions"><div class="icon icon-back
icon-back-document" enabled="true">Back to document</div></div></div>');
+ else
+ backActionTpl =
$('<div><div class="detail-actions"><div class="icon icon-back
icon-version-back-documents" enabled="true">Back to document
list</div></div></div>');
+
+ // Generate the bacj
action
+ var backAction =
library._generateElement(data[0], backActionTpl);
+ // Append the back
action
+
$(library.element).find(".documentversion").append(backAction);
+ // Attach events to the
back action
+
library._attachActions(backAction);
+
+ // Display the list of
versions
+
$(library.element).find(".documentversion").fadeIn();
+
$(library.element).find(".documentversion").css("display", "table");
+
$(library.element).find("#overlay").fadeOut();
+ },
+ error : function(jqXHR,
textStatus, errorThrown) {
+ // Display an error
message
+
library._addError("Can't get versions of the object " + objectId + " in the
repository.");
+
$(library.element).find("#overlay").fadeOut();
+ }
+ }
+ });
+
+ });
+ });
+ };
+
+ /**
+ * Event handler when the user clicks on the check-out icon
+ *
+ * @icon: Check-out icon
+ */
+ Library.prototype._onClickCheckOutDocument = function(icon) {
+ var session = this.options.cmis.session;
+ var library = this;
+
+ // Get the row containing the icon
+ var row = $(icon).closest("tr");
+ // Get the object ID
+ var objectId = $(row).prop('id');
+
+ $(library.element).find("#overlay").fadeIn(400, function() {
+
+ // Check-out the document
+ session.checkOut(objectId, {
+ request : {
+ success : function(data) {
+ // Refresh the list of documents
+ library._refresh();
+
$(library.element).find("#overlay").fadeOut();
+ },
+ error : function(jqXHR, textStatus,
errorThrown) {
+ // Display an error
+ library._addError("Can't
check-out the object " + objectId + " in the repository.");
+
$(library.element).find("#overlay").fadeOut();
+ }
+ }
+ });
+
+ });
+ };
+
+ /**
+ * Event handler when the user clicks on the check-in icon
+ *
+ * @icon: Check-in icon
+ */
+ Library.prototype._onClickCheckInDocument = function(icon) {
+ var session = this.options.cmis.session;
+ var library = this;
+
+ // Get the row containing the icon
+ var row = $(icon).closest("tr");
+ var table = $(row).closest("table");
+ // Get the object ID
+ var objectId = $(row).prop('id');
+ // Get the object series ID
+ var versionSeriesId = $(row).attr('versionSeriesId');
+
+ // Hide the list of actions
+ $(library.element).find(".more-actions-popup").fadeOut();
+
+ $(library.element).find("#overlay").fadeIn(400, function() {
+
+ // Delete all update rows
+ $(table).find("td.uploadRow").closest("tr").remove();
+
+ // Append a new row in the table to display the update
panel
+ var nbOfCells = $(row).find("td").length;
+ $(row).after("<tr><td class='checkInRow uploadRow'
colspan='" + nbOfCells + "'><div class='checkIn'></div></td></tr>");
+ var newLine =
$(row).closest("table").find(".checkInRow");
+ $(newLine).find(".checkIn").append("<label
for='fileselect'>Files to upload:</label><input id='fileselect' type='file'
autocomplete='off' name='fileselect[]' multiple='multiple'><br />");
+ $(newLine).find(".checkIn").append("<label
for='comment'>Comment:</label><input type='text' name='comment'/><br/>");
+ $(newLine).find(".checkIn").append("<label
for='major'>Major change?</label><input type='checkbox' name='major'/><br/>");
+ $(newLine).find(".checkIn").append("<button
id='checkInButton' type='button'>Check-In</button>");
+ $(newLine).find(".checkIn").append("<button
id='cancelButton' type='button'>Cancel</button>");
+
+ // Attach an event to the checkin button
+ $(newLine).find("#checkInButton").click(function(e) {
+ e.preventDefault();
+
+ // Get information
+ var fileSelect = $(newLine).find(".checkIn
input[type='file']")[0];
+ var documentName =
$(row).find("td.cmis-name").html();
+ var comment = $(newLine).find(".checkIn
input[name='comment']").val();
+ var major = ($(newLine).find(".checkIn
input[name='major']:checked").length == 1);
+
+ $(library.element).find("#overlay").fadeIn(400,
function() {
+
+ // Check-in the document
+ session.checkIn(objectId, major,
documentName, fileSelect.files[0], comment, null, null, null, {
+ request : {
+ success :
function(data) {
+
$(library.element).find("#overlay").fadeOut();
+ // Refresh the
list of documents
+
library._refresh();
+ },
+ error : function(e) {
+ // Display an
error message
+
library._addError("Can't check-in the object " + objectId + " in the
repository.");
+
$(library.element).find("#overlay").fadeOut();
+ }
+ }
+ });
+ });
+
+ });
+ $(newLine).find("#cancelButton").click(function(e) {
+ // Delete all update rows
+
$(table).find("td.uploadRow").closest("tr").remove();
+ });
+
+ $(library.element).find("#overlay").fadeOut();
+ });
+ };
+
+ /**
+ * Event handler when the user clicks on the update icon
+ *
+ * @icon: Update icon
+ */
+ Library.prototype._onClickUpdateDocument = function(icon) {
+ var session = this.options.cmis.session;
+ var library = this;
+
+ // Get the row containing the icon
+ var row = $(icon).closest("tr");
+ var table = $(row).closest("table");
+ // Get the object ID
+ var objectId = $(row).prop('id');
+
+ // Hide the list of actions
+ $(library.element).find(".more-actions-popup").fadeOut();
+
+ $(library.element).find("#overlay").fadeIn(400, function() {
+
+ // Delete all update rows
+ $(table).find("td.uploadRow").closest("tr").remove();
+
+ // Append a new row in the table to display the update
panel
+ var nbOfCells = $(row).find("td").length;
+ $(row).after("<tr><td class='uploadRow updateRow'
colspan='" + nbOfCells + "'><div class='update'></div></td></tr>");
+ var newLine =
$(row).closest("table").find(".updateRow");
+ $(newLine).find(".update").append("<label
for='fileselect'>Files to upload:</label><input id='fileselect' type='file'
autocomplete='off' name='fileselect[]' multiple='multiple'><br />");
+ $(newLine).find(".update").append("<button
id='updateButton' type='button'>Update</button>");
+ $(newLine).find(".update").append("<button
id='cancelUpdateButton' type='button'>Cancel</button>");
+
+ // Attach an event to the update button
+ $(newLine).find("#updateButton").click(function(e) {
+ e.preventDefault();
+
+ // Get information
+ var fileSelect = $(newLine).find(".update
input[type='file']")[0];
+ var comment = $(newLine).find(".update
input[name='comment']").val();
+ var mimeType = fileSelect.files[0].type;
+
+ $(library.element).find("#overlay").fadeIn(400,
function() {
+
+ // Update the content of the document
+ session.setContentStream(objectId,
fileSelect.files[0], true, mimeType, {
+ request : {
+ success :
function(data) {
+
$(library.element).find("#overlay").fadeOut();
+ // Refresh the
list of documens
+
library._refresh();
+ },
+ error : function(e) {
+ // Display an
error
+
library._addError("Can't update the object " + objectId + " in the
repository.");
+
$(library.element).find("#overlay").fadeOut();
+ }
+ }
+ });
+
+ });
+ });
+
$(newLine).find("#cancelUpdateButton").click(function(e) {
+ // Delete all update rows
+
$(table).find("td.uploadRow").closest("tr").remove();
+ });
+
+ $(library.element).find("#overlay").fadeOut();
+ });
+ };
+
+ /**
+ * Event handler when the user clicks on the cancel check-out icon
+ *
+ * @icon: Cancel check-out icon
+ */
+ Library.prototype._onClickCancelCheckOutDocument = function(icon) {
+ var session = this.options.cmis.session;
+ var library = this;
+
+ // Get the row containing the icon
+ var row = $(icon).closest("tr");
+ // Get the object ID
+ var objectId = $(row).prop('id');
+
+ $(library.element).find("#overlay").fadeIn(400, function() {
+ // Cancel check-out of this node
+ session.cancelCheckOut(objectId, {
+ request : {
+ complete : function(e, textStatus,
errorThrown) {
+ if (e.status == 200) {
+ // Refresh the list of
documents
+ library._refresh();
+
$(library.element).find("#overlay").fadeOut();
+ } else {
+ // Display an error
+
library._addError("Can't cancel check-out the object " + objectId + " in the
repository.");
+
$(library.element).find("#overlay").fadeOut();
+ }
+ }
+ }
+ });
+
+ });
+ };
+
+ /**
+ * Event handler when the user clicks on the logout button
+ */
+ Library.prototype._onClickLogout = function() {
+ var library = this;
+
+ $(library.element).find(".library").fadeOut(400, function() {
+ // Broadcast logout message
+ library._broadcastMessage("cmis-logout", null);
+
+ // Reset all authentication parameters
+ library.options.cmis.session = null;
+ library.options.cmis.username = null;
+ library.options.cmis.password = null;
+
+ // Clean stored credentials
+ library._cleanCredentials();
+
+ // Clean items
+ $(library.element).find(".library .documentlist
.tableHeader").empty();
+ $(library.element).find(".library .documentlist
.tableBody").empty();
+
+ // Hide items
+ $(library.element).find(".library div.panel").fadeOut();
+
+ // Reload the component
+ library._preload();
+ })
+ };
+
+ /**
+ * Event handler when the user clicks on the login button
+ */
+ Library.prototype._onClickLogin = function() {
+ var library = this;
+
+ // Check paramaters
+ library._checkLoginParameters(function(session) {
+ // Save the current session
+ library.options.cmis.session = session;
+
+ if (session.getToken() != null) {
+ // Save the token
+ var token = session.getToken();
+ library.options.cmis.token = token;
+
+ // Store the credentials
+ if ($(library.element).find(".login
input[name='remember']").is(':checked'))
+ library._storeCredentials("token",
JSON.stringify(session.getToken()));
+
+ // Broadcast message
+ library._broadcastMessage("cmis-login",
JSON.stringify(token));
+ } else {
+ // Save the username and password
+ var credentials =
session.getCredentials().split(":");
+ library.options.cmis.username = credentials[0];
+ library.options.cmis.password = credentials[1];
+
+ // Store the credentials
+ if ($(library.element).find(".login
input[name='remember']").is(':checked'))
+ library._storeCredentials("basic",
session.getCredentials());
+
+ // Broadcast message
+ library._broadcastMessage("cmis-login",
session.getCredentials());
+
+ // Refresh the user actions
+ library._refreshUserActions();
+ }
+
+ // Empty form fields
+ $(library.element).find(".login input[type='text'],
.login input[type='password']").val("");
+
+ // Display the library
+ $(library.element).find(".login").fadeOut(400,
function() {
+ $(library.element).find(".library").fadeIn();
+ if (library.options.autoLoad)
+ library._load();
+ });
+ }, function() {
+ library._addError("Can't login with these
credentials.");
+ });
+ };
+
+ /**
+ * Check if the authentication parameters are valid or not
+ */
+ Library.prototype._checkLoginParameters = function(successFn, errorFn) {
+ var library = this;
+
+ // Get the parameters
+ var username = $(library.element).find(".login
input[name='username']").val();
+ var password = $(library.element).find(".login
input[name='password']").val();
+
+ // Check parameters
+ if (username.length == 0 || password.length == 0)
+ library._addError("Please fill all parameters.");
+ else {
+ // Check if it's working or not
+ var session =
cmis.createSession(library.options.cmis.serverUrl);
+ session.setCredentials(username,
password).loadRepositories({
+ request : {
+ success : function(data) {
+ if (successFn != null)
+ successFn(session);
+ },
+ error : function(jqXHR, textStatus,
errorThrown) {
+ if (errorFn != null)
+ errorFn(jqXHR,
textStatus, errorThrown);
+ }
+ }
+ });
+ }
+ };
+
+ /**
+ * Store credentials to be able to re-use it later
+ */
+ Library.prototype._storeCredentials = function(credentials) {
+ // NOT SUPPORTED
+ return null;
+ };
+
+ /**
+ * Retrieve credentials
+ */
+ Library.prototype._retrieveCredentials = function(_success) {
+ // NOT SUPPORTED
+ _success();
+ };
+
+ /**
+ * Clean credentials
+ */
+ Library.prototype._cleanCredentials = function() {
+ // NOT SUPPORTED
+ return null;
+ };
+
+ /**
+ * Publish messages
+ */
+ Library.prototype._broadcastMessage = function(fn, data) {
+ var library = this;
+
+ // Check if a component is registered
+ if (!library.useMessages)
+ $(library.register.cmis.components).each(function() {
+ if (this.subscribe && this.subscribe[fn])
+ this.subscribe[fn](data);
+ });
+ else
+ // Send a broadcasting message
+ parent.postMessage('{"name":"' + fn + '", "params":["'
+ data + '"]}', "*");
+ }
+
+ /**
+ * Event handler when the user clicks on the icon to view more actions
+ *
+ * @icon: More action icons
+ */
+ Library.prototype._onClickMoreActions = function(icon) {
+ var library = this;
+ // Get the row containing the icon
+ var row = $(icon).closest("tr");
+ // Get the table
+ var table = $(row).closest("table");
+ // Get the action pop-up
+ var actions = $(row).find(".more-actions-popup");
+ // Get the cell
+ var cell = $(icon).closest("td");
+
+ if ($(actions).is(":visible")) {
+ $(actions).fadeOut();
+ } else {
+ // Hide all popup
+ $(table).find(".more-actions-popup").fadeOut();
+ // Change the position
+ actions.css("top", $(icon).offset().top - 2);
+ actions.css("left", $(icon).offset().left - 235);
+ // Display
+ actions.fadeIn();
+ }
+ };
+
+ /**
+ * Event handler when the user clicks on the view properties icon
+ *
+ * @icon: View properties icon
+ */
+ Library.prototype._onClickViewDocument = function(icon) {
+ var session = this.options.cmis.session;
+ var library = this;
+
+ // Get the row containing the icon
+ var row = $(icon).closest("tr");
+ // Get the object ID
+ var objectId = $(row).prop('id');
+
+ $(library.element).find("#overlay").fadeIn(400, function() {
+ $(library.element).find(".action-header").fadeOut();
+ $(library.element).find(".documentlist").fadeOut(400,
function() {
+
+ // Get properties of this object
+ session.getObject(objectId, "latest", {
+ includeAllowableActions : true,
+ request : {
+ success : function(data) {
+ // Display the detailed
view of this node
+
library._displayDetails(data);
+
+
$(library.element).find(".documentdetail").fadeIn();
+
$(library.element).find(".documentdetail").css("display", "table");
+
$(library.element).find("#overlay").fadeOut();
+ },
+ error : function(jqXHR,
textStatus, errorThrown) {
+ // Display an erro
+
library._addError("Can't get the object " + objectId + " in the repository.");
+
$(library.element).find("#overlay").fadeOut();
+ }
+ }
+ });
+
+ });
+ });
+ };
+
+ /**
+ * Event handler when the user clicks on an advanced search form
+ *
+ * @form: Form to display
+ */
+ Library.prototype._onClickAdvancedSearchForm = function(form) {
+ var library = this;
+
+ // Hide the list of advanced search forms
+ $(library.element).find(".query .advanced-search").fadeOut();
+
+ $(library.element).find("#overlay").fadeIn(400, function() {
+ $(library.element).find(".action-header
.uploadDocument,.documentdetail,.documentlist,.documentpreview,.advanced-search-form").fadeOut(400).promise().done(function()
{
+
+ // Save the type of the form
+
$(library.element).find(".advanced-search-form").attr("cmisType",
$(form).attr("cmisType"))
+ // Append the form to the HTML page
+
$(library.element).find(".advanced-search-form").html($(form).html());
+ // Configure the search button
+ $(library.element).find(".advanced-search-form
.search-button").click(function() {
+ library._onClickAdvancedSearch();
+ });
+ // Check if there is custom display
configuration
+ $(library.element).find(".advanced-search-form
input, .advanced-search-form select").each(function(index, input) {
+ var field = $(input).attr("field");
+
+ if (field != null)
+ // Check if there is a custom
behavior
+ if
(library.options.display.search != null)
+ if
(library.options.display.search[field] != null)
+
library.options.display.search[field](input, library);
+ });
+
+ // Display the form
+ $(library.element).find("#overlay").fadeOut();
+
$(library.element).find(".advanced-search-form").fadeIn();
+ });
+ });
+ };
+
+ /**
+ * Event handler when the user clicks on the search button in an
advanced
+ * search form
+ */
+ Library.prototype._onClickAdvancedSearch = function() {
+ var library = this;
+
+ var advancedSearch =
$(library.element).find(".advanced-search-form");
+
+ var inputs = $(".advanced-search-form input,
.advanced-search-form select");
+ var queryParams = new Object();
+ $(inputs).each(function(index, input) {
+ var field = $(input).attr("field");
+ var cmisPropertyType =
$(input).attr("cmisPropertyType");
+ if (field != null) {
+ var value = $(input).val();
+
+ if (value != null && value.length > 0)
+ if (cmisPropertyType.toLowerCase() ==
"string")
+ // Add the query parameters
+ queryParams[field] = {
+ type : 'string',
+ value : value
+ };
+ else if (cmisPropertyType.toLowerCase()
== "date") {
+ var rangeOperator =
$(input).attr("rangeOperator");
+ // Initialize the field
+ if (queryParams[field] == null)
+ queryParams[field] = {
+ type : "date"
+ };
+
+ // Save the operator
+
queryParams[field][rangeOperator] = value;
+ } else if
(cmisPropertyType.toLowerCase() == "int" || cmisPropertyType.toLowerCase() ==
"float" || cmisPropertyType.toLowerCase() == "double" ||
cmisPropertyType.toLowerCase() == "real") {
+ var rangeOperator =
$(input).attr("rangeOperator");
+ // Initialize the field
+ if (queryParams[field] == null)
+ queryParams[field] = {
+ type :
cmisPropertyType.toLowerCase()
+ };
+
+ // Save the operator
+
queryParams[field][rangeOperator] = value;
+ }
+ }
+ });
+
+ // If the query params is not empty
+ if (Object.keys(queryParams).length > 0)
+ library._onClickSearch(null, queryParams);
+ };
+
+ /**
+ * Display the detailed panel of a document
+ *
+ * @data: Object to display
+ */
+ Library.prototype._displayDetails = function(data) {
+ var library = this;
+ var session = this.options.cmis.session;
+
+ // Get the CMIS type
+ var cmisType = data.properties["cmis:objectTypeId"].value;
+ // Get the object ID
+ var objectId = data.properties["cmis:objectId"].value;
+
+ // Search the appropriate detail template
+ var libraryDetailTemplate =
$("#cmis-library-detail-template[cmisType='" + cmisType + "']");
+ if (libraryDetailTemplate.length == 0)
+ libraryDetailTemplate =
$("#cmis-library-detail-template[cmisType='_global']");
+
+ if (libraryDetailTemplate != null &&
libraryDetailTemplate.length > 0) {
+ // Generate HTML
+ var detail = library._generateElement(data,
libraryDetailTemplate);
+
+ // Attach the HTML
+ $(library.element).find(".documentdetail").html(detail);
+
+ // Attach actions
+ library._attachActions(detail);
+ }
+ };
+
+ /**
+ * Display the list of version for a specific node
+ *
+ * @data: Array of versions to display
+ */
+ Library.prototype._displayVersions = function(data) {
+ var session = this.options.cmis.session;
+ var library = this;
+
+ // Create the versions element
+ $(library.element).find(".documentversion").append('<div
class="versions"></div>');
+
+ // For each version
+ $(data).each(function(index) {
+ var data = this;
+ var objectId = data.properties["cmis:objectId"].value;
+
+ // Generate HTML
+ var version = library._generateElement(data,
$("#cmis-library-version-template"));
+
+ // Attach the version
+ $(library.element).find(".documentversion
.versions").append(version);
+
+ // Attach actions
+ library._attachActions(version);
+ });
+ };
+
+ /**
+ * Attach actions to the icons on the right panel
+ *
+ * @element: HTML elemenet containing the actions
+ */
+ Library.prototype._attachActions = function(element) {
+ var library = this;
+ var session = library.options.cmis.session;
+
+ // Hide useless icon
+ $(element).find(".icon[enabled='false']").hide();
+
+ // Hide preview icon if needed
+ $(element).find(".icon-preview").each(function() {
+ var mimeType = $(this).attr("mimeType");
+ if (library.options.previewMIMETypes.indexOf(mimeType)
== -1)
+ $(this).hide();
+ });
+
+ // Attach actions
+ $(element).find(".icon-view").click(function(event, index) {
+ library._onClickViewDocument(this);
+ });
+ $(element).find(".icon-update").click(function(event, index) {
+ event.preventDefault();
+ library._onClickUpdateDocument(this);
+ return false;
+ });
+ $(element).find(".icon-checkin").click(function(event, index) {
+ event.preventDefault();
+ library._onClickCheckInDocument(this);
+ return false;
+ });
+ $(element).find(".icon-checkout").click(function(event, index) {
+ event.preventDefault();
+ library._onClickCheckOutDocument(this);
+ return false;
+ });
+ $(element).find(".icon-cancel-checkout").click(function(event,
index) {
+ library._onClickCancelCheckOutDocument(this);
+ });
+ $(element).find(".icon-back-documents").click(function(event,
index) {
+ $(library.element).find(".documentdetail").fadeOut(400,
function() {
+
$(library.element).find(".more-actions-popup").hide();
+
$(library.element).find(".action-header").fadeIn();
+
$(library.element).find(".documentlist").fadeIn();
+ });
+ });
+
$(element).find(".icon-version-back-documents").click(function(event, index) {
+
$(library.element).find(".documentversion").fadeOut(400, function() {
+
$(library.element).find(".more-actions-popup").hide();
+
$(library.element).find(".documentlist").fadeIn();
+
$(library.element).find(".action-header").fadeIn();
+ });
+ });
+ $(element).find(".icon-back-document").click(function(event,
index) {
+ $(library.element).find(".more-actions-popup").hide();
+
$(library.element).find(".documentversion").fadeOut(400, function() {
+
$(library.element).find(".documentdetail").fadeIn(400, function() {
+
$(library.element).find(".documentdetail").css("display", "table");
+ });
+ });
+ });
+ $(element).find(".icon-preview").click(function(event, index) {
+ library._onClickPreviewDocument(this);
+ });
+
$(element).find(".icon-version[enabled='true']").click(function(event, index) {
+ library._onClickCheckVersions(this);
+ });
+
$(element).find(".icon-delete[enabled='true']").click(function(event, index) {
+ library._onClickDeleteDocument(this);
+ });
+
$(element).find(".icon-edit[enabled='true']").click(function(event, index) {
+ library._onClickEditFolder(this);
+ });
+ $(element).find(".icon-more").click(function(event, index) {
+ library._onClickMoreActions(this);
+ });
+ $(element).find(".icon-close").click(function(event, index) {
+ $(this).closest(".more-actions-popup").fadeOut();
+ });
+ };
+
+ /**
+ * Generates HTML code from a template and a JSON object
+ *
+ * @data: JSON object used as data source
+ * @template: HTML template
+ */
+ Library.prototype._generateElement = function(data, template) {
+ var library = this;
+ var session = library.options.cmis.session;
+
+ var newElem = template.html();
+ var objectId = data.properties["cmis:objectId"].value;
+
+ // Replace properties
+ $(Object.keys(data.properties)).each(function(index, argName) {
+ var regexp = new RegExp('\\$\\{' + argName + '\\}',
'g');
+
+ var value = data.properties[argName].value;
+ var type = data.properties[argName].type;
+
+ // Check if there is a custom dispaly function for this
property
+ if (library.options.display.property != null &&
library.options.display.property[argName] != null)
+ value =
library.options.display.property[argName](value, data);
+ else if (library.options.display.type != null &&
library.options.display.type[type] != null)
+ value =
library.options.display.type[type](value, data);
+
+ newElem = newElem.replace(regexp, value);
+ });
+
+ // Replace allowable actions
+ $(Object.keys(data.allowableActions)).each(function(index,
argName) {
+ var regexp = new RegExp('\\$\\{' + argName + '\\}',
'g');
+ newElem = newElem.replace(regexp,
data.allowableActions[argName]);
+ });
+
+ // Replace pending elements
+ var regexp = new RegExp('\\$\\{[A-Za-z0-9\-:_]*\\}', 'g');
+ newElem = newElem.replace(regexp, "");
+
+ newElem = $(newElem);
+
+ // Replace the download URL
+ var url;
+ if (data.properties["cmis:versionLabel"] != null)
+ url = session.getContentStreamURL(objectId,
data.properties["cmis:versionLabel"].value, true);
+ else
+ url = session.getContentStreamURL(objectId, 'latest',
true);
+ newElem.find(".icon-download a, .download a").attr("href", url);
+ newElem.find(".icon-download").click(function() {
+ window.open(url);
+ });
+
+ return newElem;
+ };
+
+ /**
+ * Event handler when the user clicks on the search icon
+ *
+ * @pageIndex: Page to display
+ * @queryParams: Object that contains the parameter
+ */
+ Library.prototype._onClickSearch = function(pageIndex, queryParams) {
+ var library = this;
+ var session = this.options.cmis.session;
+
+ var whereCondition;
+ // By default, we search document
+ var cmisType = library.options.cmis.searchObjectTypeId;
+
+ if (queryParams == null && library.options.query == null) {
+
+ // Get the query value from the input field
+ var queryValue =
$(library.element).find("#queryValue").val();
+ whereCondition = "CONTAINS('" + queryValue + "')";
+
+ // Delete params
+ delete library.options.query;
+ } else {
+
+ if (queryParams == null)
+ queryParams = library.options.query;
+
+ // We build the where condition
+ whereCondition = "";
+
+ $(Object.keys(queryParams)).each(function(index, field)
{
+ var param = queryParams[field];
+ if (param.type == "string") {
+ if (whereCondition.length > 0)
+ whereCondition += " AND ";
+
+ whereCondition += field + " LIKE '%" +
param.value + "%'";
+ } else if (param.type == "int" || param.type ==
"double" || param.type == "float" || param.type == "real") {
+
+ if (param.from != null) {
+ if (whereCondition.length > 0)
+ whereCondition += " AND
";
+ whereCondition += field + " >=
" + param.from;
+ }
+
+ if (param.to != null) {
+ if (whereCondition.length > 0)
+ whereCondition += " AND
";
+ whereCondition += field + " <=
" + param.to;
+ }
+ } else if (param.type == "date") {
+ var regexp = /\d{4}-\d{1,2}-\d{1,2}/;
+
+ // Check the from parameter
+ if (param.from != null) {
+ var value = param.from;
+ // Check the value
+ if (value.match(regexp) !=
null) {
+ if
(whereCondition.length > 0)
+ whereCondition
+= " AND ";
+
+ whereCondition += field
+ " >= TIMESTAMP '" + value + "T00:00:00.000+00:00'";
+ }
+ }
+
+ // Check the to parameter
+ if (param.to != null) {
+ var value = param.to;
+ // Check the value
+ if (value.match(regexp) !=
null) {
+ if
(whereCondition.length > 0)
+ whereCondition
+= " AND ";
+
+ whereCondition += field
+ " <= TIMESTAMP '" + value + "T23:59:59.999+00:00'";
+ }
+ }
+
+ }
+ });
+
+ // We get the content type
+ cmisType =
$(library.element).find(".advanced-search-form").attr("cmisType");
+
+ // Save the params
+ library.options.query = queryParams;
+ }
+
+ // Save the current state
+ library.options.search_mode = true;
+
+ if (whereCondition.length > 0) {
+
+ $(library.element).find("#overlay").fadeIn(400,
function() {
+
+ // Delete the pagination
+ $(library.element).find(".pagination").remove();
+
+ // Compute the page index
+ if (pageIndex == null || pageIndex == NaN)
+ pageIndex = 1;
+
+ // Store the current page
+ $(library.element).attr("currentPage",
pageIndex);
+
+ // Compute the maximum number of items
+ var maxItems =
parseInt(library.options.maxItems);
+ if (maxItems < 1 || isNaN(maxItems))
+ maxItems = 20;
+
+ // Get the order by instruction
+ var orderBy = "cmis:baseTypeId DESC,cmis:name";
+ if (library.options.sort != null) {
+ var field = library.options.sort.field;
+ var order = library.options.sort.order;
+
+ if (field != null)
+ orderBy = field + " " + order;
+ }
+
+ // Compute the query
+ var query = "SELECT * FROM " + cmisType + "
WHERE " + whereCondition + " ORDER BY " + orderBy;
+ console.log(query)
+
+ // Send the query
+ session.query(query, false, {
+ includeAllowableActions : true,
+ skipCount : (pageIndex - 1) * maxItems,
+ maxItems : maxItems,
+ request : {
+ success : function(data) {
+ // Display the result
of the query
+
library._displayQueryResult(data.results);
+ // Append the
pagination block
+
library._appendPagination(data.hasMoreItems, data.numItems, "_onClickSearch");
+ },
+ error : function(jqXHR,
textStatus, errorThrown) {
+ // Display an error
message
+
library._addError("Can't execute the query " + query + ".");
+ }
+ }
+ });
+ });
+ }
+ }
+
+ /**
+ * Displays an error message
+ *
+ * @msg: Error message
+ */
+ Library.prototype._addError = function(msg) {
+ var library = this;
+ var newElem = $(library.element).find(".errors").append("<div
class='error'>" + msg + "</div>");
+ $(newElem).find(".error").click(function() {
+ $(this).fadeOut(500, function() {
+ $(this).remove();
+ });
+ });
+ $(library.element).find("#overlay").fadeOut();
+ };
+
+ // Define the plugin
+ $.fn[pluginName] = function(options) {
+ return this.each(function() {
+ if (!$.data(this, 'plugin_' + pluginName)) {
+ $.data(this, 'plugin_' + pluginName, new
Library(this, options));
+ }
+ });
+ }
+
+})(jQuery, window, document);
Propchange:
chemistry/parts/trunk/sharepoint-projects/CMIS.Sharepoint2010.SiteAssets/CMIS.Sharepoint2010.SiteAssets/SiteAssets/library/library.js
------------------------------------------------------------------------------
svn:eol-style = native
Added:
chemistry/parts/trunk/sharepoint-projects/CMIS.Sharepoint2010.SiteAssets/CMIS.Sharepoint2010.SiteAssets/SiteAssets/library/reset.css
URL:
http://svn.apache.org/viewvc/chemistry/parts/trunk/sharepoint-projects/CMIS.Sharepoint2010.SiteAssets/CMIS.Sharepoint2010.SiteAssets/SiteAssets/library/reset.css?rev=1642272&view=auto
==============================================================================
---
chemistry/parts/trunk/sharepoint-projects/CMIS.Sharepoint2010.SiteAssets/CMIS.Sharepoint2010.SiteAssets/SiteAssets/library/reset.css
(added)
+++
chemistry/parts/trunk/sharepoint-projects/CMIS.Sharepoint2010.SiteAssets/CMIS.Sharepoint2010.SiteAssets/SiteAssets/library/reset.css
Fri Nov 28 08:44:28 2014
@@ -0,0 +1,28 @@
+/**
+ * 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.
+ */
+ html,body,table,caption,tbody,tfoot,thead,tr,th,td
+ {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ outline: 0;
+ font-size: 100%;
+ vertical-align: baseline;
+ background: transparent;
+}
Propchange:
chemistry/parts/trunk/sharepoint-projects/CMIS.Sharepoint2010.SiteAssets/CMIS.Sharepoint2010.SiteAssets/SiteAssets/library/reset.css
------------------------------------------------------------------------------
svn:eol-style = native