Browse Source

Merge branch 'pr/139'

Conflicts:
	app/css/app.css
master
Igor Zhukov 10 years ago
parent
commit
96d7f04981
  1. 9
      .gitignore
  2. 72
      app/css/app.css
  3. 48
      app/index.html
  4. 11
      app/js/app.js
  5. 6
      app/js/controllers.js
  6. 4
      app/js/directives.js
  7. 6
      app/js/lib/mtproto.js
  8. 2
      app/js/lib/pq_worker.js
  9. 4
      app/js/lib/sha1_worker.js
  10. 8
      app/js/services.js
  11. 2
      app/partials/im.html
  12. 4
      app/partials/login.html
  13. 4
      app/partials/welcome.html
  14. 123
      gulpfile.js
  15. 36
      package.json

9
.gitignore vendored

@ -1,10 +1,11 @@ @@ -1,10 +1,11 @@
.DS_Store
.idea
*.sublime-workspace
# Node.js package manager
/node_modules
/npm-debug.log
node_modules
npm-debug.log
dist
package_dist
releases
webogram*.zip
*.sublime-workspace
app/js/templates.js

72
app/css/app.css

@ -1,7 +1,7 @@ @@ -1,7 +1,7 @@
/* app css stylesheet */
html {
background: #dee4e9 url(../img/bg_tile.png?1) 0 0 repeat;
background: #dee4e9 url(../img/bg_tile.png) 0 0 repeat;
/*background-size: 300px 468px;*/
}
body {
@ -255,12 +255,12 @@ input[type="number"]::-webkit-inner-spin-button { @@ -255,12 +255,12 @@ input[type="number"]::-webkit-inner-spin-button {
height: 18px;
vertical-align: text-top;
background: url(../img/icons/IconsetW.png?1) -15px -419px no-repeat;
background: url(../img/icons/IconsetW.png) -15px -419px no-repeat;
background-size: 42px 620px;
opacity: 0.6;
}
.is_1x .icon-back {
background-image: url(../img/icons/IconsetW_1x.png?2);
background-image: url(../img/icons/IconsetW_1x.png);
}
.tg_page_head .navbar-quick-nav a:hover .icon-back {
opacity: 1;
@ -484,7 +484,7 @@ input[type="number"]::-webkit-inner-spin-button { @@ -484,7 +484,7 @@ input[type="number"]::-webkit-inner-spin-button {
margin-right: -7px;
}
.im_dialogs_col .nano > .pane {
background : rgba(0,0,0,.0);
background : rgba(0,0,0,0.0);
width : 12px;
right: 0px;
-webkit-transition : .2s;
@ -510,7 +510,7 @@ input[type="number"]::-webkit-inner-spin-button { @@ -510,7 +510,7 @@ input[type="number"]::-webkit-inner-spin-button {
.im_dialogs_search_field {
font-size: 12px;
line-height: normal;
background: #F2F2F2 url(../img/icons/IconsetW.png?1) -6px -205px no-repeat;
background: #F2F2F2 url(../img/icons/IconsetW.png) -6px -205px no-repeat;
background-size: 42px 620px;
border: 1px solid #F2F2F2;
border-radius: 3px;
@ -519,7 +519,7 @@ input[type="number"]::-webkit-inner-spin-button { @@ -519,7 +519,7 @@ input[type="number"]::-webkit-inner-spin-button {
margin: 0;
}
.is_1x .im_dialogs_search_field {
background-image: url(../img/icons/IconsetW_1x.png?2);
background-image: url(../img/icons/IconsetW_1x.png);
}
.im_dialogs_search_field:focus,
.im_dialogs_search_field:active {
@ -534,12 +534,12 @@ input[type="number"]::-webkit-inner-spin-button { @@ -534,12 +534,12 @@ input[type="number"]::-webkit-inner-spin-button {
width: 13px;
height: 13px;
vertical-align: text-top;
background: url(../img/icons/IconsetW.png?1) -15px -192px no-repeat;
background: url(../img/icons/IconsetW.png) -15px -192px no-repeat;
background-size: 42px 620px;
opacity: 0.6;
}
.is_1x .im_dialogs_search_clear {
background-image: url(../img/icons/IconsetW_1x.png?2);
background-image: url(../img/icons/IconsetW_1x.png);
}
.im_dialogs_search_clear:hover {
opacity: 1;
@ -787,11 +787,11 @@ a.im_dialog:hover .im_dialog_date { @@ -787,11 +787,11 @@ a.im_dialog:hover .im_dialog_date {
margin-top: 7px;
margin-left: 6px;
background: url(../img/icons/IconsetW.png?1) -17px -444px no-repeat;
background: url(../img/icons/IconsetW.png) -17px -444px no-repeat;
background-size: 42px 620px;
}
.is_1x .icon-caret {
background-image: url(../img/icons/IconsetW_1x.png?2);
background-image: url(../img/icons/IconsetW_1x.png);
}
.im_history_panel_media_dropdown .dropdown-menu {
@ -994,11 +994,11 @@ div.im_message_video_thumb { @@ -994,11 +994,11 @@ div.im_message_video_thumb {
width: 15px;
height: 19px;
background: url(../img/icons/IconsetW.png?1) -14px -389px no-repeat;
background: url(../img/icons/IconsetW.png) -14px -389px no-repeat;
background-size: 42px 620px;
}
.is_1x .icon-geo-point {
background-image: url(../img/icons/IconsetW_1x.png?2);
background-image: url(../img/icons/IconsetW_1x.png);
}
@ -1022,7 +1022,7 @@ div.im_message_video_thumb { @@ -1022,7 +1022,7 @@ div.im_message_video_thumb {
height: 38px;
vertical-align: text-top;
background: #F2F2F2 url(../img/icons/IconsetW.png?1) -2px -229px no-repeat;
background: #F2F2F2 url(../img/icons/IconsetW.png) -2px -229px no-repeat;
background-size: 42px 620px;
border-radius: 3px;
margin-right: 10px;
@ -1030,7 +1030,7 @@ div.im_message_video_thumb { @@ -1030,7 +1030,7 @@ div.im_message_video_thumb {
.is_1x .icon-document,
.is_1x .icon-photo,
.is_1x .icon-video {
background-image: url(../img/icons/IconsetW_1x.png?2);
background-image: url(../img/icons/IconsetW_1x.png);
}
.im_message_selected .icon-document,
@ -1109,13 +1109,13 @@ img.im_message_document_thumb { @@ -1109,13 +1109,13 @@ img.im_message_document_thumb {
height: 38px;
vertical-align: text-top;
background: #F2F2F2 url(../img/icons/IconsetW.png?1) -2px -277px no-repeat;
background: #F2F2F2 url(../img/icons/IconsetW.png) -2px -277px no-repeat;
background-size: 42px 620px;
border-radius: 3px;
margin-right: 10px;
}
.is_1x .icon-audio {
background-image: url(../img/icons/IconsetW_1x.png?2);
background-image: url(../img/icons/IconsetW_1x.png);
}
.im_message_audio_info {
@ -1246,14 +1246,14 @@ img.im_message_document_thumb { @@ -1246,14 +1246,14 @@ img.im_message_document_thumb {
display: none;
width: 16px;
height: 10px;
background: url(../img/icons/Checks2_2x.png?1) 0 0 no-repeat;
background: url(../img/icons/Checks2_2x.png) 0 0 no-repeat;
background-size: 16px 10px;
top: 2px;
position: relative;
}
.icon-message-status-tick.message-status-unread-tick {
/*width: 13px;*/
background: url(../img/icons/Checks1_2x.png?1) 0 0 no-repeat;
background: url(../img/icons/Checks1_2x.png) 0 0 no-repeat;
background-size: 16px 10px;
}
.im_message_date {
@ -1378,12 +1378,12 @@ textarea.im_message_field { @@ -1378,12 +1378,12 @@ textarea.im_message_field {
width: 19px;
height: 23px;
vertical-align: text-top;
background: url(../img/icons/IconsetW.png?1) -12px -68px no-repeat;
background: url(../img/icons/IconsetW.png) -12px -68px no-repeat;
background-size: 42px 620px;
opacity: 0.8;
}
.is_1x .icon-paperclip {
background-image: url(../img/icons/IconsetW_1x.png?2);
background-image: url(../img/icons/IconsetW_1x.png);
}
.im_attach:hover .icon-paperclip {
opacity: 1;
@ -1406,12 +1406,12 @@ textarea.im_message_field { @@ -1406,12 +1406,12 @@ textarea.im_message_field {
width: 23px;
height: 23px;
vertical-align: text-top;
background: url(../img/icons/IconsetW.png?1) -10px -4px no-repeat;
background: url(../img/icons/IconsetW.png) -10px -4px no-repeat;
background-size: 42px 620px;
opacity: 0.8;
}
.is_1x .icon-emoji {
background-image: url(../img/icons/IconsetW_1x.png?2);
background-image: url(../img/icons/IconsetW_1x.png);
}
.im_emoji_btn:hover .icon-emoji {
opacity: 1;
@ -1456,12 +1456,12 @@ textarea.im_message_field { @@ -1456,12 +1456,12 @@ textarea.im_message_field {
width: 25px;
height: 21px;
vertical-align: text-top;
background: url(../img/icons/IconsetW.png?1) -9px -132px no-repeat;
background: url(../img/icons/IconsetW.png) -9px -132px no-repeat;
background-size: 42px 620px;
opacity: 0.8;
}
.is_1x .icon-camera {
background-image: url(../img/icons/IconsetW_1x.png?2);
background-image: url(../img/icons/IconsetW_1x.png);
}
.im_media_attach:hover .icon-camera {
opacity: 1;
@ -1879,14 +1879,14 @@ img.img_fullsize { @@ -1879,14 +1879,14 @@ img.img_fullsize {
.emoji-menu-tail {
display: none;
background: url(../img/icons/IconsetW.png?1) -14px -268px no-repeat;
background: url(../img/icons/IconsetW.png) -14px -268px no-repeat;
background-size: 42px 620px;
width: 14px;
height: 7px;
margin: 0 83px;
}
.is_1x .emoji-menu-tail {
background-image: url(../img/icons/IconsetW_1x.png?2);
background-image: url(../img/icons/IconsetW_1x.png);
}
@ -2030,7 +2030,7 @@ img.img_fullsize { @@ -2030,7 +2030,7 @@ img.img_fullsize {
.contacts_modal_search_field {
font-size: 12px;
line-height: normal;
background: #F2F2F2 url(../img/icons/IconsetW.png?1) -6px -205px no-repeat;
background: #F2F2F2 url(../img/icons/IconsetW.png) -6px -205px no-repeat;
background-size: 42px 620px;
border: 1px solid #F2F2F2;
border-radius: 3px;
@ -2039,7 +2039,7 @@ img.img_fullsize { @@ -2039,7 +2039,7 @@ img.img_fullsize {
margin: 0;
}
.is_1x .contacts_modal_search_field {
background-image: url(../img/icons/IconsetW_1x.png?2);
background-image: url(../img/icons/IconsetW_1x.png);
}
.contacts_modal_search_field:focus,
.contacts_modal_search_field:active {
@ -2054,12 +2054,12 @@ img.img_fullsize { @@ -2054,12 +2054,12 @@ img.img_fullsize {
width: 13px;
height: 13px;
vertical-align: text-top;
background: url(../img/icons/IconsetW.png?1) -15px -192px no-repeat;
background: url(../img/icons/IconsetW.png) -15px -192px no-repeat;
background-size: 42px 620px;
opacity: 0.6;
}
.is_1x .contacts_modal_search_clear {
background-image: url(../img/icons/IconsetW_1x.png?2);
background-image: url(../img/icons/IconsetW_1x.png);
}
.contacts_modal_search_clear:hover {
opacity: 1;
@ -2131,12 +2131,12 @@ a.contacts_modal_contact:hover .contacts_modal_contact_status { @@ -2131,12 +2131,12 @@ a.contacts_modal_contact:hover .contacts_modal_contact_status {
top: 22px;
width: 17px;
height: 15px;
background: url(../img/icons/IconsetW.png?1) -13px -366px no-repeat;
background: url(../img/icons/IconsetW.png) -13px -366px no-repeat;
background-size: 42px 620px;
opacity: 0.5;
}
.is_1x .icon-contact-tick {
background-image: url(../img/icons/IconsetW_1x.png?2);
background-image: url(../img/icons/IconsetW_1x.png);
}
.contacts_modal_members_list a.contacts_modal_contact:hover .icon-contact-tick {
background-position: -13px -366px;
@ -2229,11 +2229,11 @@ a.contacts_modal_contact:hover .contacts_modal_contact_status { @@ -2229,11 +2229,11 @@ a.contacts_modal_contact:hover .contacts_modal_contact_status {
width: 12px;
height: 15px;
background: url(../img/icons/IconsetW.png?1) -15px -319px no-repeat;
background: url(../img/icons/IconsetW.png) -15px -319px no-repeat;
background-size: 42px 620px;
}
.is_1x .icon-delete {
background-image: url(../img/icons/IconsetW_1x.png?2);
background-image: url(../img/icons/IconsetW_1x.png);
}
.im_message_selected {
background: #f2f6fa;
@ -2276,11 +2276,11 @@ a.contacts_modal_contact:hover .contacts_modal_contact_status { @@ -2276,11 +2276,11 @@ a.contacts_modal_contact:hover .contacts_modal_contact_status {
width: 26px;
height: 26px;
margin: 13px 0 0 40px;
background: url(../img/icons/IconsetW.png?1) -9px -516px no-repeat;
background: url(../img/icons/IconsetW.png) -9px -516px no-repeat;
background-size: 42px 620px;
}
.is_1x .icon-select-tick {
background-image: url(../img/icons/IconsetW_1x.png?2);
background-image: url(../img/icons/IconsetW_1x.png);
}
.im_history_selectable .icon-select-tick,
.im_content_message_select_area:hover .icon-select-tick {

48
app/index.html

@ -4,10 +4,14 @@ @@ -4,10 +4,14 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, user-scalable=no">
<title>Webogram</title>
<!-- build:css css/app.css -->
<link rel="stylesheet" href="vendor/angular/angular-csp.css"/>
<link rel="stylesheet" href="vendor/bootstrap/css/bootstrap.css?1"/>
<link rel="stylesheet" href="vendor/bootstrap/css/bootstrap.css"/>
<link rel="stylesheet" href="vendor/jquery.nanoscroller/nanoscroller.css"/>
<link rel="stylesheet" href="css/app.css?25"/>
<link rel="stylesheet" href="css/app.css"/>
<!-- endbuild -->
<link rel="icon" href="favicon.ico" type="image/x-icon" />
<meta property="og:title" content="Webogram">
@ -21,31 +25,39 @@ @@ -21,31 +25,39 @@
<div ng-view></div>
<script type="text/javascript" src="vendor/console-polyfill/console-polyfill.js?1"></script>
<!-- build:js js/app.js -->
<script type="text/javascript" src="vendor/console-polyfill/console-polyfill.js"></script>
<script type="text/javascript" src="vendor/jquery/jquery.min.js"></script>
<script type="text/javascript" src="vendor/jquery.nanoscroller/nanoscroller.js"></script>
<script type="text/javascript" src="vendor/jquery.emojiarea/jquery.emojiarea.js?5"></script>
<script type="text/javascript" src="vendor/jquery.emojiarea/jquery.emojiarea.js"></script>
<script type="text/javascript" src="vendor/angular/angular.js?1"></script>
<script type="text/javascript" src="vendor/angular/angular-route.js?1"></script>
<script type="text/javascript" src="vendor/angular/angular-animate.js?1"></script>
<script type="text/javascript" src="vendor/angular/angular-sanitize.js?1"></script>
<script type="text/javascript" src="vendor/ui-bootstrap/ui-bootstrap-custom-tpls-0.10.0.js?1"></script>
<script type="text/javascript" src="vendor/angular/angular.js"></script>
<script type="text/javascript" src="vendor/angular/angular-route.js"></script>
<script type="text/javascript" src="vendor/angular/angular-animate.js"></script>
<script type="text/javascript" src="vendor/angular/angular-sanitize.js"></script>
<script type="text/javascript" src="vendor/ui-bootstrap/ui-bootstrap-custom-tpls-0.10.0.js"></script>
<script type="text/javascript" src="vendor/jsbn/jsbn_combined.js"></script>
<script type="text/javascript" src="vendor/cryptoJS/crypto.js?1"></script>
<script type="text/javascript" src="vendor/cryptoJS/crypto.js"></script>
<script type="text/javascript" src="vendor/zlib/gunzip.min.js"></script>
<script type="text/javascript" src="js/lib/config.js"></script>
<script type="text/javascript" src="js/lib/mtproto.js?19"></script>
<script type="text/javascript" src="js/lib/mtproto.js"></script>
<script type="text/javascript" src="js/util.js"></script>
<script type="text/javascript" src="js/app.js"></script>
<script type="text/javascript" src="js/services.js"></script>
<script type="text/javascript" src="js/controllers.js"></script>
<script type="text/javascript" src="js/filters.js"></script>
<!--PRODUCTION_ONLY_BEGIN
<script type="text/javascript" src="js/templates.js"></script>
PRODUCTION_ONLY_END-->
<script type="text/javascript" src="js/directives.js"></script>
<!-- endbuild -->
<script type="text/javascript" src="js/util.js?2"></script>
<script type="text/javascript" src="js/app.js?16"></script>
<script type="text/javascript" src="js/services.js?21"></script>
<script type="text/javascript" src="js/controllers.js?29"></script>
<script type="text/javascript" src="js/filters.js?4"></script>
<script type="text/javascript" src="js/directives.js?20"></script>
</body>
</html>
</html>

11
app/js/app.js

@ -30,9 +30,12 @@ angular.module('myApp', [ @@ -30,9 +30,12 @@ angular.module('myApp', [
'ngAnimate',
'ngSanitize',
'ui.bootstrap',
'mtproto.services',
'myApp.filters',
'myApp.services',
'mtproto.services',
/*PRODUCTION_ONLY_BEGIN
'myApp.templates',
PRODUCTION_ONLY_END*/
'myApp.directives',
'myApp.controllers'
]).
@ -63,9 +66,9 @@ config(['$locationProvider', '$routeProvider', '$compileProvider', function($loc @@ -63,9 +66,9 @@ config(['$locationProvider', '$routeProvider', '$compileProvider', function($loc
// $locationProvider.html5Mode(true);
$routeProvider.when('/', {templateUrl: 'partials/welcome.html?4', controller: 'AppWelcomeController'});
$routeProvider.when('/login', {templateUrl: 'partials/login.html?5', controller: 'AppLoginController'});
$routeProvider.when('/im', {templateUrl: 'partials/im.html?13', controller: 'AppIMController', reloadOnSearch: false});
$routeProvider.when('/', {templateUrl: 'partials/welcome.html', controller: 'AppWelcomeController'});
$routeProvider.when('/login', {templateUrl: 'partials/login.html', controller: 'AppLoginController'});
$routeProvider.when('/im', {templateUrl: 'partials/im.html', controller: 'AppIMController', reloadOnSearch: false});
$routeProvider.otherwise({redirectTo: '/'});
}]);

6
app/js/controllers.js

@ -168,7 +168,7 @@ angular.module('myApp.controllers', []) @@ -168,7 +168,7 @@ angular.module('myApp.controllers', [])
$scope.isLoggedIn = true;
$scope.openSettings = function () {
$modal.open({
templateUrl: 'partials/settings_modal.html?3',
templateUrl: 'partials/settings_modal.html',
controller: 'SettingsModalController',
scope: $rootScope.$new(),
windowClass: 'settings_modal_window'
@ -191,7 +191,7 @@ angular.module('myApp.controllers', []) @@ -191,7 +191,7 @@ angular.module('myApp.controllers', [])
scope.userIDs = userIDs;
$modal.open({
templateUrl: 'partials/chat_create_modal.html?3',
templateUrl: 'partials/chat_create_modal.html',
controller: 'ChatCreateModalController',
scope: scope,
windowClass: 'contacts_modal_window'
@ -979,7 +979,7 @@ angular.module('myApp.controllers', []) @@ -979,7 +979,7 @@ angular.module('myApp.controllers', [])
scope.chatID = $scope.chatID;
$modal.open({
templateUrl: 'partials/chat_edit_modal.html?3',
templateUrl: 'partials/chat_edit_modal.html',
controller: 'ChatEditModalController',
scope: scope,
windowClass: 'contacts_modal_window'

4
app/js/directives.js

@ -16,7 +16,7 @@ angular.module('myApp.directives', ['myApp.filters']) @@ -16,7 +16,7 @@ angular.module('myApp.directives', ['myApp.filters'])
restrict: 'AE',
scope: true,
translude: false,
templateUrl: 'partials/dialog.html?5'
templateUrl: 'partials/dialog.html'
};
})
@ -25,7 +25,7 @@ angular.module('myApp.directives', ['myApp.filters']) @@ -25,7 +25,7 @@ angular.module('myApp.directives', ['myApp.filters'])
restrict: 'AE',
scope: true,
translude: false,
templateUrl: 'partials/message.html?7'
templateUrl: 'partials/message.html'
};
})

6
app/js/lib/mtproto.js

@ -1122,7 +1122,7 @@ factory('MtpAuthorizer', function (MtpDcConfigurator, MtpRsaKeysManager, MtpSecu @@ -1122,7 +1122,7 @@ factory('MtpAuthorizer', function (MtpDcConfigurator, MtpRsaKeysManager, MtpSecu
console.log('PQ factorization start');
if (!!window.Worker) {
var worker = new Worker('js/lib/pq_worker.js?1');
var worker = new Worker('js/lib/pq_worker.js');
worker.onmessage = function (e) {
auth.p = e.data[0];
@ -1416,7 +1416,7 @@ factory('MtpAesService', function ($q) { @@ -1416,7 +1416,7 @@ factory('MtpAesService', function ($q) {
};
}
var worker = new Worker('js/lib/aes_worker.js?2'),
var worker = new Worker('js/lib/aes_worker.js'),
taskID = 0,
awaiting = {};
@ -1468,7 +1468,7 @@ factory('MtpSha1Service', function ($q) { @@ -1468,7 +1468,7 @@ factory('MtpSha1Service', function ($q) {
};
}
var worker = new Worker('js/lib/sha1_worker.js?2'),
var worker = new Worker('js/lib/sha1_worker.js'),
taskID = 0,
awaiting = {};

2
app/js/lib/pq_worker.js

@ -6,7 +6,7 @@ @@ -6,7 +6,7 @@
*/
importScripts(
'../../vendor/console-polyfill/console-polyfill.js?1',
'../../vendor/console-polyfill/console-polyfill.js',
'mtproto.js',
'../../vendor/jsbn/jsbn_combined.js'
);

4
app/js/lib/sha1_worker.js

@ -6,9 +6,9 @@ @@ -6,9 +6,9 @@
*/
importScripts(
'../../vendor/console-polyfill/console-polyfill.js?1',
'../../vendor/console-polyfill/console-polyfill.js',
'mtproto.js',
'../../vendor/cryptoJS/crypto.js?1'
'../../vendor/cryptoJS/crypto.js'
);
onmessage = function (e) {

8
app/js/services.js

@ -290,7 +290,7 @@ angular.module('myApp.services', []) @@ -290,7 +290,7 @@ angular.module('myApp.services', [])
scope.userID = userID;
var modalInstance = $modal.open({
templateUrl: 'partials/user_modal.html?2',
templateUrl: 'partials/user_modal.html',
controller: 'UserModalController',
scope: scope,
windowClass: 'user_modal_window'
@ -444,7 +444,7 @@ angular.module('myApp.services', []) @@ -444,7 +444,7 @@ angular.module('myApp.services', [])
scope.chatID = chatID;
var modalInstance = $modal.open({
templateUrl: 'partials/chat_modal.html?4',
templateUrl: 'partials/chat_modal.html',
controller: 'ChatModalController',
windowClass: 'chat_modal_window',
scope: scope
@ -1792,7 +1792,7 @@ angular.module('myApp.services', []) @@ -1792,7 +1792,7 @@ angular.module('myApp.services', [])
scope.photoID = photoID;
var modalInstance = $modal.open({
templateUrl: 'partials/photo_modal.html?1',
templateUrl: 'partials/photo_modal.html',
controller: 'PhotoModalController',
scope: scope
});
@ -1892,7 +1892,7 @@ angular.module('myApp.services', []) @@ -1892,7 +1892,7 @@ angular.module('myApp.services', [])
scope.player = {};
var modalInstance = $modal.open({
templateUrl: 'partials/video_modal.html?1',
templateUrl: 'partials/video_modal.html',
controller: 'VideoModalController',
scope: scope
});

2
app/partials/im.html

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
<div ng-include="'partials/head.html?3'"></div>
<div ng-include="'partials/head.html'"></div>
<div class="im_page_wrap" ng-class="{im_page_peer_not_selected: !curDialog.peer}">

4
app/partials/login.html

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
<div ng-include="'partials/head.html?3'"></div>
<div ng-include="'partials/head.html'"></div>
<div class="login_form_wrap">
@ -35,4 +35,4 @@ @@ -35,4 +35,4 @@
{{progress.enabled ? 'Checking code...' : 'Sign in'}}
</button>
</form>
</div>
</div>

4
app/partials/welcome.html

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
<div ng-include="'partials/head.html?3'"></div>
<div ng-include="'partials/head.html'"></div>
<div ng-show="showWelcome">
@ -14,4 +14,4 @@ @@ -14,4 +14,4 @@
<a href="#/login" class="btn btn-success btn-block">Start Messaging</a>
</div>
</div>
</div>

123
gulpfile.js

@ -0,0 +1,123 @@ @@ -0,0 +1,123 @@
var gulp = require('gulp');
var es = require('event-stream');
var pj = require('./package.json');
var $ = require('gulp-load-plugins')();
var concat = require('gulp-concat');
// The generated file is being created at src
// so it can be fetched by usemin.
gulp.task('templates', function() {
return gulp.src('app/partials/*.html')
.pipe($.angularTemplatecache('templates.js', {
root: 'partials',
module: 'myApp.templates',
standalone: true
}))
.pipe(gulp.dest('app/js'));
});
gulp.task('usemin', ['templates', 'enable-production'], function() {
return gulp.src('app/index.html')
.pipe($.usemin({
html: [$.minifyHtml({empty: true})],
js: ['concat', $.rev()],
css: [$.minifyCss(), 'concat']
}))
.pipe(gulp.dest('dist'));
});
gulp.task('copy', function() {
return es.concat(
gulp.src(['app/favicon.ico', 'app/favicon_unread.ico', 'app/manifest.webapp', 'app/manifest.json', 'app/**/*worker.js'])
.pipe(gulp.dest('dist')),
gulp.src(['app/img/**/*', '!app/img/screenshot*'])
.pipe(gulp.dest('dist/img')),
gulp.src('app/vendor/console-polyfill/console-polyfill.js')
.pipe(gulp.dest('dist/vendor/console-polyfill')),
gulp.src('app/js/lib/mtproto.js')
.pipe(gulp.dest('dist/js/lib')),
gulp.src('app/js/lib/config.js')
.pipe(gulp.dest('dist/js/lib')),
gulp.src('app/vendor/jsbn/jsbn_combined.js')
.pipe(gulp.dest('dist/vendor/jsbn')),
gulp.src('app/vendor/cryptoJS/crypto.js')
.pipe(gulp.dest('dist/vendor/cryptoJS'))
);
});
gulp.task('compress-dist', ['add-csp'], function() {
return gulp.src('dist/**/*')
.pipe($.zip('webogram_v' + pj.version + '.zip'))
.pipe(gulp.dest('releases'));
});
gulp.task('cleanup-dist', ['compress-dist'], function() {
return gulp.src(['releases/**/*', '!releases/*.zip']).pipe($.clean());
});
gulp.task('add-csp', ['build'], function() {
return gulp.src('dist/index.html')
.pipe($.replace('<html lang=en ng-app=myApp>', '<html lang=en ng-app=myApp ng-csp="">'))
.pipe(gulp.dest('dist'));
});
gulp.task('update-version-manifests', function() {
return gulp.src(['app/manifest.webapp', 'app/manifest.json'])
.pipe($.replace(/"version": ".*",/, '"version": "' + pj.version + '",'))
.pipe(gulp.dest('app'));
});
gulp.task('update-version-settings', function() {
return gulp.src('app/partials/settings_modal.html')
.pipe($.replace(/<span class="settings_version">alpha .*<\/span>/, '<span class="settings_version">alpha ' + pj.version + '<\/span>'))
.pipe(gulp.dest('app/partials'));
});
gulp.task('update-version-comments', function() {
return gulp.src('app/**/*.js')
.pipe($.replace(/Webogram v[0-9.]*/, 'Webogram v' + pj.version))
.pipe(gulp.dest('app'));
});
gulp.task('enable-production', function() {
return es.concat(
gulp.src('app/**/*.html')
.pipe($.replace(/PRODUCTION_ONLY_BEGIN/g, 'PRODUCTION_ONLY_BEGIN-->'))
.pipe($.replace(/PRODUCTION_ONLY_END/, '<!--PRODUCTION_ONLY_END'))
.pipe(gulp.dest('app')),
gulp.src('app/**/*.js')
.pipe($.replace(/PRODUCTION_ONLY_BEGIN(\*\/)?/g, 'PRODUCTION_ONLY_BEGIN*/'))
.pipe($.replace(/(\/\*)?PRODUCTION_ONLY_END/g, '/*PRODUCTION_ONLY_END'))
.pipe(gulp.dest('app'))
);
});
gulp.task('disable-production', function() {
return es.concat(
gulp.src('app/index.html')
.pipe($.replace(/PRODUCTION_ONLY_BEGIN-->/g, 'PRODUCTION_ONLY_BEGIN'))
.pipe($.replace(/<!--PRODUCTION_ONLY_END/g, 'PRODUCTION_ONLY_END'))
.pipe(gulp.dest('app')),
gulp.src('app/**/*.js')
.pipe($.replace(/PRODUCTION_ONLY_BEGIN(\*\/)?/g, 'PRODUCTION_ONLY_BEGIN'))
.pipe($.replace(/(\/\*)?PRODUCTION_ONLY_END/g, 'PRODUCTION_ONLY_END'))
.pipe(gulp.dest('app'))
);
});
gulp.task('clean', function() {
return gulp.src(['dist/*', '!dist/.git']).pipe($.clean());
});
gulp.task('bump', ['update-version-manifests', 'update-version-settings', 'update-version-comments']);
gulp.task('build', ['templates', 'usemin', 'copy'], function () {
gulp.start('disable-production');
});
gulp.task('package', ['cleanup-dist']);
gulp.task('default', ['clean'], function() {
gulp.start('build');
});

36
package.json

@ -0,0 +1,36 @@ @@ -0,0 +1,36 @@
{
"name": "webogram",
"version": "0.0.19",
"description": "UNOFFICIAL Telegram Web App.",
"main": "server.js",
"scripts": {
"start": "node server.js"
},
"repository": {
"type": "git",
"url": "https://github.com/zhukov/webogram.git"
},
"author": "zhukov",
"license": "GPL",
"bugs": {
"url": "https://github.com/zhukov/webogram/issues"
},
"homepage": "http://zhukov.github.io/webogram",
"devDependencies": {
"gulp": "~3.5.5",
"gulp-angular-templatecache": "^1.1.0",
"gulp-load-plugins": "^0.4.0",
"gulp-usemin": "^0.3.3",
"gulp-uglify": "^0.2.1",
"gulp-rev": "^0.3.0",
"gulp-minify-css": "^0.3.0",
"gulp-minify-html": "^0.1.1",
"gulp-imagemin": "^0.1.5",
"gulp-clean": "^0.2.4",
"gulp-replace": "^0.2.0",
"gulp-concat": "^2.1.7",
"gulp-grep-stream": "0.0.2",
"event-stream": "^3.1.0",
"gulp-zip": "^0.1.2"
}
}
Loading…
Cancel
Save