| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247 |
- var shareViewModel;
- function ShareViewModel(updateDocF) {
- var self = this;
- self.hasInitBeenCalled = false;
- self.hasSetupBeenCalled = false;
- self.selectedPerm = ko.observable('read');
- self.selectedPermLabel = ko.computed(function() {
- if (self.selectedPerm() == 'write') {
- return 'Modify';
- } else {
- return 'Read';
- }
- });
- self.selectedDoc = ko.observable(ko.mapping.fromJS({
- perms: {
- read: {
- users: [],
- groups: []
- },
- write: {
- users: [],
- groups: []
- }
- }
- }))
- self.updateDoc = updateDocF
- self.setDocId = function(docId) {
- if (docId == -1) { return false; }
- $.get('/desktop/api/doc/get', { id : docId },
- function (data) {
- shareViewModel.selectedDoc(data)
- });
- }
- }
- function openShareModal() {
- $("#documentShareModal").modal("show");
- setupSharing(function(){
- $("#documentShareAddBtn").removeClass("disabled");
- $("#documentShareCaret").removeClass("disabled");
- $("#documentShareTypeahead").removeAttr("disabled");
- });
- }
- function isShared() {
- if (!shareViewModel) { return false; }
- read = shareViewModel.selectedDoc().perms.read;
- return read.users.length + read.groups.length > 0
- }
- function prettifyUsername(userId) {
- var _user = null;
- for (var i = 0; i < JSON_USERS_GROUPS.users.length; i++) {
- if (JSON_USERS_GROUPS.users[i].id == userId) {
- _user = JSON_USERS_GROUPS.users[i];
- }
- }
- if (_user != null) {
- return (_user.first_name != "" ? _user.first_name + " " : "") + (_user.last_name != "" ? _user.last_name + " " : "") + ((_user.first_name != "" || _user.last_name != "") ? "(" : "") + _user.username + ((_user.first_name != "" || _user.last_name != "") ? ")" : "");
- }
- return "";
- }
- function initSharing(id, updateFunc) {
- if(! updateFunc) {
- updateFunc = function () {}
- }
- shareViewModel = new ShareViewModel(updateFunc);
- ko.applyBindings(shareViewModel, $(id)[0]);
- shareViewModel.hasInitBeenCalled = true;
- return shareViewModel;
- }
- function setupSharing(id, updateFunc) {
- if (shareViewModel == null || !shareViewModel.hasInitBeenCalled) {
- shareViewModel = initSharing(id, updateFunc);
- }
- if (! self.hasSetupBeenCalled){
- $.getJSON('/desktop/api/users/autocomplete', function (data) {
- self.hasSetupBeenCalled = true;
- JSON_USERS_GROUPS = data;
- dropdown = [];
- map = {};
- $.each(JSON_USERS_GROUPS.users, function (i, user) {
- var _display = prettifyUsername(user.id);
- map[_display] = user;
- dropdown.push(_display);
- });
- $.each(JSON_USERS_GROUPS.groups, function (i, group) {
- map[group.name] = group;
- dropdown.push(group.name);
- });
- $("#documentShareTypeahead").typeahead({
- source: function (query, process) {
- process(dropdown);
- },
- matcher: function (item) {
- if (item.toLowerCase().indexOf(this.query.trim().toLowerCase()) != -1) {
- return true;
- }
- },
- sorter: function (items) {
- return items.sort();
- },
- highlighter: function (item) {
- var _icon = "fa";
- var _display = "";
- if (map[item].hasOwnProperty("username")) {
- _icon += " fa-user";
- }
- else {
- _icon += " fa-users";
- }
- var regex = new RegExp('(' + this.query + ')', 'gi');
- return "<i class='" + _icon + "'></i> " + item.replace(regex, "<strong>$1</strong>");
- },
- updater: function (item) {
- selectedUserOrGroup = map[item];
- return item;
- }
- });
- $("#documentShareTypeahead").on("keyup", function (e) {
- var _code = (e.keyCode ? e.keyCode : e.which);
- if (_code == 13) {
- handleTypeaheadSelection();
- }
- });
- if (typeof id == "function"){
- id();
- }
- });
- $("#documentShareAddBtn").on("click", function () {
- if (! $(this).hasClass("disabled")){
- handleTypeaheadSelection();
- }
- });
- }
- else {
- if (typeof id == "function"){
- id();
- }
- }
- return shareViewModel;
- }
- function updateSharePerm(perms, user) {
- $(perms).each(function (cnt, item) {
- if (item.id == user.id) {
- perms.splice(cnt, 1);
- }
- });
- shareViewModel.selectedDoc.valueHasMutated();
- shareDocFinal();
- }
- function removeUserReadShare(user) {
- updateSharePerm(shareViewModel.selectedDoc().perms.read.users, user);
- }
- function removeUserWriteShare(user) {
- updateSharePerm(shareViewModel.selectedDoc().perms.write.users, user);
- }
- function removeGroupReadShare(group) {
- updateSharePerm(shareViewModel.selectedDoc().perms.read.groups, group);
- }
- function removeGroupWriteShare(group) {
- updateSharePerm(shareViewModel.selectedDoc().perms.write.groups, group);
- }
- function changeDocumentSharePerm(perm) {
- shareViewModel.selectedPerm(perm);
- }
- function handleTypeaheadSelection() {
- if (selectedUserOrGroup != null) {
- if (selectedUserOrGroup.hasOwnProperty("username")) {
- shareViewModel.selectedDoc().perms[shareViewModel.selectedPerm()].users.push(selectedUserOrGroup);
- }
- else {
- shareViewModel.selectedDoc().perms[shareViewModel.selectedPerm()].groups.push(selectedUserOrGroup);
- }
- shareViewModel.selectedDoc.valueHasMutated();
- shareDocFinal();
- }
- selectedUserOrGroup = null;
- $("#documentShareTypeahead").val("");
- }
- function shareDocFinal() {
- var _postPerms = {
- read: {
- user_ids: [],
- group_ids: []
- },
- write: {
- user_ids: [],
- group_ids: []
- }
- }
- $(shareViewModel.selectedDoc().perms.read.users).each(function (cnt, item) {
- _postPerms.read.user_ids.push(item.id);
- });
- $(shareViewModel.selectedDoc().perms.read.groups).each(function (cnt, item) {
- _postPerms.read.group_ids.push(item.id);
- });
- $(shareViewModel.selectedDoc().perms.write.users).each(function (cnt, item) {
- _postPerms.write.user_ids.push(item.id);
- });
- $(shareViewModel.selectedDoc().perms.write.groups).each(function (cnt, item) {
- _postPerms.write.group_ids.push(item.id);
- });
- $.post("/desktop/api/doc/update_permissions", {
- doc_id: shareViewModel.selectedDoc().id,
- data: JSON.stringify(_postPerms)
- }, function (response) {
- if (response != null) {
- if (response.status != 0) {
- $(document).trigger("error", "There was an error processing your action: " + response.message);
- }
- else {
- shareViewModel.updateDoc(response.doc);
- }
- }
- });
- }
|