further ui improvements
This commit is contained in:
parent
ee3bd40ef7
commit
2a4fdeeb96
@ -15,15 +15,30 @@ $fa-font-path: "/bower_components/font-awesome/fonts";
|
|||||||
padding: 0.2em 0;
|
padding: 0.2em 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.indent {
|
||||||
|
margin-left: 2em;
|
||||||
|
}
|
||||||
table.revisions th, table.revisions td{
|
table.revisions th, table.revisions td{
|
||||||
padding-left: 1em;
|
|
||||||
padding-right: 1em;
|
padding-right: 1em;
|
||||||
}
|
}
|
||||||
|
table.revisions td.content {
|
||||||
|
max-height: 30em;
|
||||||
|
}
|
||||||
table.revisions .state {
|
table.revisions .state {
|
||||||
width: 7em;
|
width: 7em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
form.controls {
|
||||||
|
margin-top: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
form.form-inline.controls > * {
|
||||||
|
margin-right: 1em;
|
||||||
|
}
|
||||||
|
form.form-inline.controls > .form-group > label, {
|
||||||
|
margin-right: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
// Component styles are injected through grunt
|
// Component styles are injected through grunt
|
||||||
// injector
|
// injector
|
||||||
@import 'account/login/login.scss';
|
@import 'account/login/login.scss';
|
||||||
|
@ -28,4 +28,68 @@ angular.module('markdownFormatWdiffApp')
|
|||||||
controller: 'DocumentWdiffCtrl'
|
controller: 'DocumentWdiffCtrl'
|
||||||
});
|
});
|
||||||
|
|
||||||
|
})
|
||||||
|
.factory('App', function ($window, Auth) {
|
||||||
|
var root = {};
|
||||||
|
|
||||||
|
root.json = function (object) {
|
||||||
|
return JSON.stringify(object, null, " ");
|
||||||
|
};
|
||||||
|
|
||||||
|
//returns true if this revision is the current revision in its document
|
||||||
|
root.isCurrent = function (revision) {
|
||||||
|
if (!revision)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return revision._id == revision.document.currentRevision;
|
||||||
|
};
|
||||||
|
|
||||||
|
//returns true if this revision is the first revision in its document
|
||||||
|
// Note: documents have an initial empty sentinel revision - that is the zeroth revision
|
||||||
|
root.isFirst = function (revision) {
|
||||||
|
if (!revision)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (revision.document.revisions.length <= 1)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return revision._id == revision.document.revisions[1];
|
||||||
|
};
|
||||||
|
|
||||||
|
//returns true if the current user is logged in and is the owner of this document / revision
|
||||||
|
root.isOwner = function (document) {
|
||||||
|
var currentUser = Auth.getCurrentUser();
|
||||||
|
if (!currentUser || !document || !document.owner)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return document.owner._id == currentUser._id;
|
||||||
|
}
|
||||||
|
|
||||||
|
//looks up this revision in the document revisions list
|
||||||
|
//and returns the previous revision
|
||||||
|
//if this is the oldest revision, then just return itself
|
||||||
|
root.previousRevision = function (document, revision) {
|
||||||
|
//find the index of the revision in documents
|
||||||
|
var index = _.findIndex(document.revisions, '_id');
|
||||||
|
var prevIndex = index-1;
|
||||||
|
if (prevIndex < 0)
|
||||||
|
prevIndex = 0;
|
||||||
|
|
||||||
|
return document.revisions[prevIndex];
|
||||||
|
}
|
||||||
|
//looks up this revision in the document revisions list
|
||||||
|
//and returns the previous revision
|
||||||
|
//if this is the oldest revision, then just return itself
|
||||||
|
root.nextRevision = function (document, revision) {
|
||||||
|
//find the index of the revision in documents
|
||||||
|
var index = _.findIndex(document.revisions, '_id');
|
||||||
|
var prevIndex = index+1;
|
||||||
|
if (prevIndex >= document.revisions.size())
|
||||||
|
prevIndex = document.revisions.size()-1;
|
||||||
|
|
||||||
|
return document.revisions[prevIndex];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return root;
|
||||||
});
|
});
|
@ -1,3 +0,0 @@
|
|||||||
table.revisions {
|
|
||||||
column-gap: 2em;
|
|
||||||
}
|
|
@ -1,7 +1,8 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
angular.module('markdownFormatWdiffApp')
|
angular.module('markdownFormatWdiffApp')
|
||||||
.controller('DocumentIndexCtrl', function ($scope, $routeParams, $http, Auth, $location) {
|
.controller('DocumentIndexCtrl', function ($scope, $routeParams, $http, Auth, $location, App) {
|
||||||
|
$scope.App = App;
|
||||||
$scope.title = 'Documents';
|
$scope.title = 'Documents';
|
||||||
|
|
||||||
$scope.documents = [];
|
$scope.documents = [];
|
||||||
@ -25,11 +26,10 @@ angular.module('markdownFormatWdiffApp')
|
|||||||
$http.post('/api/documents', {title: $scope.newDocumentTitle})
|
$http.post('/api/documents', {title: $scope.newDocumentTitle})
|
||||||
.success(function(newDocument) {
|
.success(function(newDocument) {
|
||||||
$scope.documents.push(newDocument);
|
$scope.documents.push(newDocument);
|
||||||
//and document view page
|
//skip redirecting to document view page
|
||||||
$location.path('/'+newDocument._id);
|
//$location.path('/'+newDocument._id);
|
||||||
});
|
});
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.json = function (object) { return JSON.stringify(object, null, " "); };
|
|
||||||
})
|
})
|
||||||
|
@ -4,8 +4,8 @@ nav(ng-include='"components/elements/header.html"')
|
|||||||
|
|
||||||
.container
|
.container
|
||||||
.row(ng-show='isLoggedIn()')
|
.row(ng-show='isLoggedIn()')
|
||||||
.col-lg-9.col-md-12
|
.col-lg-0.col-md-12
|
||||||
form.form-inline
|
form.form-inline.controls.well
|
||||||
.form-group
|
.form-group
|
||||||
label(for='title-input')
|
label(for='title-input')
|
||||||
| New Document
|
| New Document
|
||||||
@ -14,29 +14,39 @@ nav(ng-include='"components/elements/header.html"')
|
|||||||
| Create
|
| Create
|
||||||
|
|
||||||
.row
|
.row
|
||||||
.col-lg-6.col-md-12(ng-repeat='document in documents | orderBy:"currentRevision.created":true' )
|
.col-md-6.col-sm-12(ng-repeat='document in documents | orderBy:"currentRevision.created":true' )
|
||||||
h1
|
.center-block
|
||||||
a(href='/{{document._id}}')
|
h1
|
||||||
{{document.title}}
|
a(href='/{{document._id}}')
|
||||||
table.revisions
|
| {{document.title}}
|
||||||
tr
|
a.btn.btn-default.pull-right(href='/{{document._id}}/revision/new')
|
||||||
th.state State
|
| New rev
|
||||||
th.created revision
|
a.btn.btn-default.pull-right(ng-hide='document.revisions.length<=1', href='/wdiff/{{document.revisions[1]._id}}/{{document.currentRevision._id}}')
|
||||||
tr(ng-repeat='revision in document.revisions | orderBy:"created":true | limitTo:5' )
|
| Wdiff all
|
||||||
td.state {{revision.state}}
|
div.indent
|
||||||
td.created
|
p(ng-hide='App.isOwner(document)')
|
||||||
h4
|
span
|
||||||
a(href='/{{document._id}}/revision/{{revision._id}}')
|
| Owner:
|
||||||
{{revision.created}}
|
span
|
||||||
//div
|
| {{document.owner.name}}
|
||||||
p
|
table.revisions
|
||||||
| State:
|
tr
|
||||||
{{document.currentRevision.state}}
|
th.state State
|
||||||
p
|
th.created Revision
|
||||||
| Updated:
|
//th.wdiff(colspan='2') Wdiff With
|
||||||
{{document.currentRevision.created}}
|
tr(ng-repeat='revision in document.revisions | orderBy:"created":true | limitTo:5' ng-hide='$last')
|
||||||
//pre
|
td.state {{revision.state}}
|
||||||
{{json(document)}}
|
td.created
|
||||||
|
h4
|
||||||
|
a(href='/{{document._id}}/revision/{{revision._id}}')
|
||||||
|
{{revision.created}}
|
||||||
|
//these aren't working great
|
||||||
|
//td.wdiff.prev
|
||||||
|
a.btn.btn-default(ng-hide='$last', href='/wdiff/{{App.previousRevision(document, revision)._id}}/{{revision._id}}') Prev
|
||||||
|
//td.wdiff.curr
|
||||||
|
a.btn.btn-default(ng-hide='$first', href='/wdiff/{{revision._id}}/{{document.currentRevision._id}}') Current
|
||||||
|
//pre
|
||||||
|
{{App.json(document)}}
|
||||||
|
|
||||||
|
|
||||||
footer(ng-include='"components/elements/footer.html"')
|
footer(ng-include='"components/elements/footer.html"')
|
@ -1,7 +1,8 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
angular.module('markdownFormatWdiffApp')
|
angular.module('markdownFormatWdiffApp')
|
||||||
.controller('DocumentRevisionNewCtrl', function ($scope, $routeParams, $http, Auth, $location) {
|
.controller('DocumentRevisionNewCtrl', function ($scope, $routeParams, $http, Auth, $location, App) {
|
||||||
|
$scope.App = App;
|
||||||
$scope.title = '';
|
$scope.title = '';
|
||||||
$scope.subtitle = '';
|
$scope.subtitle = '';
|
||||||
|
|
||||||
@ -12,14 +13,6 @@ angular.module('markdownFormatWdiffApp')
|
|||||||
$scope.getCurrentUser = Auth.getCurrentUser;
|
$scope.getCurrentUser = Auth.getCurrentUser;
|
||||||
$scope.isLoggedIn = Auth.isLoggedIn;
|
$scope.isLoggedIn = Auth.isLoggedIn;
|
||||||
|
|
||||||
$scope.isOwner = function () {
|
|
||||||
var currentUser = Auth.getCurrentUser();
|
|
||||||
if (!currentUser || !$scope.revision || !$scope.revision.owner)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
return $scope.revision.owner._id == currentUser._id;
|
|
||||||
};
|
|
||||||
|
|
||||||
var path = '/api/documents/' + $routeParams.id;
|
var path = '/api/documents/' + $routeParams.id;
|
||||||
$http.get(path).success(function(document) {
|
$http.get(path).success(function(document) {
|
||||||
$scope.document = document;
|
$scope.document = document;
|
||||||
@ -30,7 +23,6 @@ angular.module('markdownFormatWdiffApp')
|
|||||||
|
|
||||||
|
|
||||||
$scope.saveRevision = function() {
|
$scope.saveRevision = function() {
|
||||||
alert(JSON.stringify($scope.revision))
|
|
||||||
//save the revision to the document
|
//save the revision to the document
|
||||||
$http.post('/api/documents/'+$routeParams.id+'/revisions', $scope.revision)
|
$http.post('/api/documents/'+$routeParams.id+'/revisions', $scope.revision)
|
||||||
.success(function(newRevision) {
|
.success(function(newRevision) {
|
||||||
@ -39,5 +31,4 @@ angular.module('markdownFormatWdiffApp')
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.json = function (object) { return JSON.stringify(object, null, " "); };
|
|
||||||
})
|
})
|
||||||
|
@ -5,7 +5,7 @@ nav(ng-include='"components/elements/header.html"')
|
|||||||
.container
|
.container
|
||||||
.row
|
.row
|
||||||
.col-lg-6.col-md-12
|
.col-lg-6.col-md-12
|
||||||
form
|
form.controls
|
||||||
h4
|
h4
|
||||||
{{document.title}} - {{revision.created}}
|
{{document.title}} - {{revision.created}}
|
||||||
.form-group
|
.form-group
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
angular.module('markdownFormatWdiffApp')
|
angular.module('markdownFormatWdiffApp')
|
||||||
.controller('DocumentRevisionCtrl', function ($scope, $routeParams, $http, Auth) {
|
.controller('DocumentRevisionCtrl', function ($scope, $routeParams, $http, Auth, App) {
|
||||||
|
$scope.App = App;
|
||||||
$scope.revision = {};
|
$scope.revision = {};
|
||||||
|
|
||||||
$scope.title = '';
|
$scope.title = '';
|
||||||
@ -20,11 +21,11 @@ angular.module('markdownFormatWdiffApp')
|
|||||||
}
|
}
|
||||||
|
|
||||||
//returns true if this revision is the current revision in its document
|
//returns true if this revision is the current revision in its document
|
||||||
$scope.isCurrent = function () {
|
$scope.isCurrent = function (revision) {
|
||||||
if (!$scope.revision)
|
if (!revision)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return $scope.revision._id == $scope.revision.document.currentRevision;
|
return revision._id == revision.document.currentRevision;
|
||||||
}
|
}
|
||||||
|
|
||||||
var path = '/api/documents/'+$routeParams.id+'/revisions/' + $routeParams.revisionid;
|
var path = '/api/documents/'+$routeParams.id+'/revisions/' + $routeParams.revisionid;
|
||||||
@ -34,6 +35,5 @@ angular.module('markdownFormatWdiffApp')
|
|||||||
$scope.subtitle = $scope.isCurrent() ? " (current)":(" ("+$scope.revision.created+")");
|
$scope.subtitle = $scope.isCurrent() ? " (current)":(" ("+$scope.revision.created+")");
|
||||||
});
|
});
|
||||||
|
|
||||||
$scope.json = function (object) { return JSON.stringify(object, null, " "); };
|
|
||||||
|
|
||||||
})
|
})
|
||||||
|
@ -6,8 +6,18 @@ nav(ng-include='"components/elements/header.html"')
|
|||||||
.row
|
.row
|
||||||
//span(ng-show='isCurrent()')
|
//span(ng-show='isCurrent()')
|
||||||
| Current revision
|
| Current revision
|
||||||
a.btn.btn-primary(ng-hide='isCurrent()' href='/wdiff/{{revision._id}}/{{revision.document.currentRevision}}')
|
form.form-inline.controls.well
|
||||||
| wdiff current
|
|
||||||
|
a.btn.btn-primary(ng-hide='App.isFirst(revision)' href='/{{revision.document._id}}/revision/{{App.previousRevision(revision.document, revision)._id}}')
|
||||||
|
| View Previous
|
||||||
|
//a.btn.btn-primary(ng-hide='App.isFirst()' href='/wdiff/{{App.previousRevision(revision.document, revision)._id}}/{{revision._id}}')
|
||||||
|
| Wdiff from Previous
|
||||||
|
//a.btn.btn-primary(ng-hide='App.isCurrent()' href='/wdiff/{{revision._id}}/{{App.nextRevision(revision.document, revision)._id}}')
|
||||||
|
| Wdiff to Next
|
||||||
|
a.btn.btn-primary(ng-hide='App.isCurrent(revision)' href='/{{revision.document._id}}/revision/{{App.nextRevision(revision.document, revision)._id}}')
|
||||||
|
| View Next
|
||||||
|
a.btn.btn-primary.pull-right(ng-hide='App.isCurrent(revision)' href='/wdiff/{{revision._id}}/{{revision.document.currentRevision}}')
|
||||||
|
| Wdiff to Current
|
||||||
|
|
||||||
.row
|
.row
|
||||||
.col-lg-6.col-md-9
|
.col-lg-6.col-md-9
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
angular.module('markdownFormatWdiffApp')
|
angular.module('markdownFormatWdiffApp')
|
||||||
.controller('DocumentShowCtrl', function ($scope, $routeParams, $http, Auth) {
|
.controller('DocumentShowCtrl', function ($scope, $routeParams, $http, Auth, App) {
|
||||||
|
$scope.App = App;
|
||||||
$scope.document = {};
|
$scope.document = {};
|
||||||
$scope.title = '';
|
$scope.title = '';
|
||||||
|
|
||||||
@ -23,6 +24,17 @@ angular.module('markdownFormatWdiffApp')
|
|||||||
$scope.title = document.title;
|
$scope.title = document.title;
|
||||||
});
|
});
|
||||||
|
|
||||||
$scope.json = function (object) { return JSON.stringify(object, null, " "); };
|
//looks up this revision in the document revisions list
|
||||||
|
//and returns the previous revision
|
||||||
|
//if this is the oldest revision, then just return itself
|
||||||
|
$scope.previousRevision = function (revision) {
|
||||||
|
//find the index of the revision in documents
|
||||||
|
var index = _.findIndex($scope.document.revisions, '_id');
|
||||||
|
var prevIndex = index-1;
|
||||||
|
if (prevIndex < 0)
|
||||||
|
prevIndex = 0;
|
||||||
|
|
||||||
|
return $scope.document.revisions[prevIndex];
|
||||||
|
}
|
||||||
|
|
||||||
})
|
})
|
||||||
|
@ -3,27 +3,37 @@ nav(ng-include='"components/navbar/navbar.html"')
|
|||||||
nav(ng-include='"components/elements/header.html"')
|
nav(ng-include='"components/elements/header.html"')
|
||||||
|
|
||||||
.container
|
.container
|
||||||
.row(ng-show='isOwner()')
|
.row
|
||||||
.col-lg-12
|
.col-lg-12
|
||||||
form
|
|
||||||
a.btn.btn-primary(href='/{{document._id}}/revision/new')
|
|
||||||
| New Revision
|
|
||||||
|
|
||||||
.row
|
.row
|
||||||
.col-lg-6.col-md-9.center-block
|
.col-lg-6.col-sm-12
|
||||||
|
form.form-inline.controls.well(ng-show='App.isOwner(document)')
|
||||||
|
a.btn.btn-primary(href='/{{document._id}}/revision/new')
|
||||||
|
| New Revision
|
||||||
|
|
||||||
table.revisions
|
table.revisions
|
||||||
tr
|
tr
|
||||||
th.state State
|
th.state State
|
||||||
th.created revision
|
th.created Revision
|
||||||
tr(ng-repeat='revision in document.revisions | orderBy:"created":true | limitTo:5' )
|
tr(ng-repeat='revision in document.revisions | orderBy:"created":true' ng-hide='$last' )
|
||||||
td.state {{revision.state}}
|
td.state {{revision.state}}
|
||||||
td.created
|
td.created
|
||||||
h4
|
h4
|
||||||
a(href='/{{document._id}}/revision/{{revision._id}}')
|
a(href='/{{document._id}}/revision/{{revision._id}}')
|
||||||
{{revision.created}}
|
{{revision.created}}
|
||||||
//pre
|
//these aren't working great
|
||||||
| {{json(revision)}}
|
//td.wdiff.prev
|
||||||
|
a.btn.btn-default(ng-hide='$last', href='/wdiff/{{App.previousRevision(document, revision)._id}}/{{revision._id}}') Prev
|
||||||
|
//td.wdiff.curr
|
||||||
|
a.btn.btn-default(ng-hide='$first', href='/wdiff/{{revision._id}}/{{document.currentRevision._id}}') Current
|
||||||
|
|
||||||
|
.col-lg-6.col-sm-12
|
||||||
|
div(btf-markdown='document.currentRevision.content')
|
||||||
|
|
||||||
|
//pre.col-lg-6
|
||||||
|
| {{json(document)}}
|
||||||
|
|
||||||
|
|
||||||
footer(ng-include='"components/elements/footer.html"')
|
footer(ng-include='"components/elements/footer.html"')
|
@ -1,7 +1,8 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
angular.module('markdownFormatWdiffApp')
|
angular.module('markdownFormatWdiffApp')
|
||||||
.controller('DocumentWdiffCtrl', function ($scope, $routeParams, $http, Auth) {
|
.controller('DocumentWdiffCtrl', function ($scope, $routeParams, $http, Auth, App) {
|
||||||
|
$scope.App = App;
|
||||||
$scope.wdiff = '';
|
$scope.wdiff = '';
|
||||||
$scope.title = '';
|
$scope.title = '';
|
||||||
$scope.same = false;
|
$scope.same = false;
|
||||||
@ -10,24 +11,8 @@ angular.module('markdownFormatWdiffApp')
|
|||||||
|
|
||||||
$scope.getCurrentUser = Auth.getCurrentUser;
|
$scope.getCurrentUser = Auth.getCurrentUser;
|
||||||
$scope.isLoggedIn = Auth.isLoggedIn;
|
$scope.isLoggedIn = Auth.isLoggedIn;
|
||||||
/*
|
|
||||||
//returns true if the current user is logged in and is the owner of this document / revision
|
|
||||||
$scope.isOwner = function () {
|
|
||||||
var currentUser = Auth.getCurrentUser();
|
|
||||||
if (!currentUser || !$scope.revision || !$scope.revision.owner)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
return $scope.revision.owner._id == currentUser._id;
|
|
||||||
}
|
|
||||||
|
|
||||||
//returns true if this revision is the current revision in its document
|
|
||||||
$scope.isCurrent = function () {
|
|
||||||
if (!$scope.revision)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
return $scope.revision._id == $scope.revision.document.currentRevision._id;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
var path = '/api/documents/wdiff/'+$routeParams.revisionida+'/'+$routeParams.revisionidb;
|
var path = '/api/documents/wdiff/'+$routeParams.revisionida+'/'+$routeParams.revisionidb;
|
||||||
$http.get(path).success(function(result) {
|
$http.get(path).success(function(result) {
|
||||||
$scope.result = result;
|
$scope.result = result;
|
||||||
@ -39,6 +24,5 @@ angular.module('markdownFormatWdiffApp')
|
|||||||
$scope.subtitle = "wdiff: "+result.a.created + " / " + result.b.created;
|
$scope.subtitle = "wdiff: "+result.a.created + " / " + result.b.created;
|
||||||
});
|
});
|
||||||
|
|
||||||
$scope.json = function (object) { return JSON.stringify(object, null, " "); };
|
|
||||||
|
|
||||||
})
|
})
|
||||||
|
@ -161,6 +161,7 @@ exports.showRevision = function(req, res) {
|
|||||||
.findById(req.params.revisionid)
|
.findById(req.params.revisionid)
|
||||||
.populate('owner', '_id name')
|
.populate('owner', '_id name')
|
||||||
.populate('document', '_id title currentRevision')
|
.populate('document', '_id title currentRevision')
|
||||||
|
.populate('document.revisions', '_id')
|
||||||
.exec(function (err, revision) {
|
.exec(function (err, revision) {
|
||||||
if(err) { return handleError(res, err); }
|
if(err) { return handleError(res, err); }
|
||||||
if(!revision) { return res.send(404); }
|
if(!revision) { return res.send(404); }
|
||||||
|
@ -205,7 +205,7 @@ function rewriteWdiffMarkdown(source) {
|
|||||||
// |([ \t]+[0-9]+\.) - numeric lists
|
// |([ \t]+[0-9]+\.) - numeric lists
|
||||||
// )?
|
// )?
|
||||||
// [ \t]+ - trailing whitespace
|
// [ \t]+ - trailing whitespace
|
||||||
var PREFIX = /^([ \t]*\>)*(([ \t]*#*)|([ \t]+[\*\+-])|([ \t]+[0-9]+\.))?[ \t]+/
|
var PREFIX = /^([ \t]*\>)*(([ \t]*#*)|([ \t]*[\*\+-])|([ \t]*[\d]+\.))?[ \t]+/
|
||||||
//var PREFIX = /^#*/
|
//var PREFIX = /^#*/
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user