Compare commits
No commits in common. "master" and "v1.6.4" have entirely different histories.
60
.gitignore
vendored
@ -1,55 +1,5 @@
|
|||||||
# IDE folders
|
src/messenger/.idea/workspace.xml
|
||||||
.idea
|
src/messenger/webim/install/package
|
||||||
|
src/messenger/absent_*
|
||||||
src/mibew/install/package
|
src/messenger/release*
|
||||||
src/absent_*
|
.DS_Store
|
||||||
src/release*
|
|
||||||
src/upload*
|
|
||||||
src/*.po
|
|
||||||
|
|
||||||
# Do not index actual configuration files
|
|
||||||
src/mibew/configs/config.yml
|
|
||||||
src/tests/server_side/mibew/libs/config.php
|
|
||||||
|
|
||||||
# Do not index avatars
|
|
||||||
src/mibew/files/avatar/*
|
|
||||||
!src/mibew/files/avatar/.keep
|
|
||||||
|
|
||||||
# Do not index cache files
|
|
||||||
src/mibew/cache/*
|
|
||||||
!src/mibew/cache/.keep
|
|
||||||
!src/mibew/cache/.htaccess
|
|
||||||
|
|
||||||
# Do not index plugins
|
|
||||||
src/mibew/plugins/*
|
|
||||||
!src/mibew/plugins/.keep
|
|
||||||
|
|
||||||
# Do not index custom locales
|
|
||||||
src/mibew/locales/*
|
|
||||||
!src/mibew/locales/en/
|
|
||||||
|
|
||||||
# Do not index composer files
|
|
||||||
src/composer.phar
|
|
||||||
src/composer.lock
|
|
||||||
|
|
||||||
# Do not index third-party libraries
|
|
||||||
src/mibew/vendor
|
|
||||||
src/mibew/js/vendor
|
|
||||||
|
|
||||||
# Do not index node.js modules that are used for building
|
|
||||||
src/node_modules
|
|
||||||
src/package-lock.json
|
|
||||||
|
|
||||||
# Do not index compiled js files of the core
|
|
||||||
src/mibew/js/compiled/*
|
|
||||||
!src/mibew/js/compiled/.keep
|
|
||||||
|
|
||||||
# Do not index compiled files of chat styles
|
|
||||||
src/mibew/styles/chats/*/templates_compiled/client_side/*
|
|
||||||
!src/mibew/styles/chats/*/templates_compiled/client_side/.keep
|
|
||||||
src/mibew/styles/chats/*/js/compiled/*
|
|
||||||
!src/mibew/styles/chats/*/js/compiled/.keep
|
|
||||||
|
|
||||||
# Do not index compiled files of page styles
|
|
||||||
src/mibew/styles/pages/*/templates_compiled/client_side/*
|
|
||||||
!src/mibew/styles/pages/*/templates_compiled/client_side/.keep
|
|
||||||
|
3
.gitmodules
vendored
@ -1,3 +0,0 @@
|
|||||||
[submodule "src/i18n"]
|
|
||||||
path = src/i18n
|
|
||||||
url = git@github.com:Mibew/i18n.git
|
|
@ -1,12 +0,0 @@
|
|||||||
### Environment
|
|
||||||
* Mibew Messenger version:
|
|
||||||
* OS:
|
|
||||||
* Web server:
|
|
||||||
* PHP:
|
|
||||||
* PHP extensions:
|
|
||||||
* MySQL:
|
|
||||||
### Expected behavior
|
|
||||||
|
|
||||||
### Actual behavior
|
|
||||||
|
|
||||||
### Steps to reproduce the behavior
|
|
@ -1,8 +0,0 @@
|
|||||||
Fixes # .
|
|
||||||
|
|
||||||
Changes proposed in this pull request:
|
|
||||||
-
|
|
||||||
-
|
|
||||||
-
|
|
||||||
|
|
||||||
@Mibew/core-developers
|
|
71
README.md
@ -1,71 +0,0 @@
|
|||||||
# Mibew Messenger
|
|
||||||
|
|
||||||
Mibew Messenger is an open-source live support application written
|
|
||||||
in PHP and MySQL. It enables one-on-one chat assistance in real-time
|
|
||||||
directly from your website.
|
|
||||||
|
|
||||||
## About this repository
|
|
||||||
|
|
||||||
This repository contains the core of Mibew Messenger application.
|
|
||||||
|
|
||||||
## Server requirements
|
|
||||||
|
|
||||||
1. A webserver or web hosting account running on any major Operating System
|
|
||||||
2. PHP (7.2.5 and above) with PDO, pdo_mysql, cURL, mbstring and gd extensions
|
|
||||||
3. MySQL 5.0 and above
|
|
||||||
|
|
||||||
## Build from sources
|
|
||||||
|
|
||||||
There are several actions one should do before use the latest version of Mibew from the repository:
|
|
||||||
|
|
||||||
1. Obtain a copy of the repository using `git clone`, download button, or another way.
|
|
||||||
2. Install [node.js](http://nodejs.org/) and [npm](https://www.npmjs.org/).
|
|
||||||
3. Install [Gulp](http://gulpjs.com/).
|
|
||||||
4. Navigate to `src/` directory of the local copy of the repository.
|
|
||||||
5. Install npm dependencies using `npm install`.
|
|
||||||
6. Run Gulp to build Mibew using `gulp default`.
|
|
||||||
|
|
||||||
Finally `.tar.gz` and `.zip` archives of the ready-to-use Mibew will be available in `src/release` directory.
|
|
||||||
|
|
||||||
## Terms of Use
|
|
||||||
|
|
||||||
Mibew Messenger is licensed under the terms of [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0).
|
|
||||||
|
|
||||||
## Other repositories of the Mibew project
|
|
||||||
|
|
||||||
### Actual
|
|
||||||
1. [Mibew Messenger i18n repository](https://github.com/Mibew/i18n)
|
|
||||||
2. [Mibew Messenger design repository](https://github.com/Mibew/design)
|
|
||||||
3. [Mibew documentation repository](https://github.com/Mibew/docs.mibew.org)
|
|
||||||
|
|
||||||
### Obsolete
|
|
||||||
1. [Mibew Java applications repository](https://github.com/Mibew/java)
|
|
||||||
2. [Mibew Tray repository](https://github.com/Mibew/tray)
|
|
||||||
|
|
||||||
### Plugins
|
|
||||||
|
|
||||||
1. [Mibew Boilerplate plugin](https://github.com/Mibew/boilerplate-plugin) - a template for a real plugin
|
|
||||||
|
|
||||||
#### Ready for production use
|
|
||||||
|
|
||||||
1. [Mibew Advanced Button plugin](https://github.com/Mibew/advanced-button-plugin)
|
|
||||||
2. [Mibew Auto Invite plugin](https://github.com/Mibew/auto-invite-plugin)
|
|
||||||
3. [Mibew Auto Reply plugin](https://github.com/Mibew/auto-reply-plugin)
|
|
||||||
4. [Mibew Broadcast plugin](https://github.com/Mibew/broadcast-plugin)
|
|
||||||
5. [Mibew Bulk Logs Operations plugin](https://github.com/Mibew/bulk-logs-operations-plugin)
|
|
||||||
6. [Mibew Button Refresh plugin](https://github.com/Mibew/button-refresh-plugin)
|
|
||||||
7. [Mibew Emoji plugin](https://github.com/Mibew/emoji-plugin)
|
|
||||||
8. [Mibew Filter Visitors By Operator Code plugin](https://github.com/Mibew/filter-visitors-by-operator-code-plugin)
|
|
||||||
9. [Mibew First Message plugin](https://github.com/Mibew/first-message-plugin)
|
|
||||||
10. [Mibew Geo IP plugin](https://github.com/Mibew/geo-ip-plugin)
|
|
||||||
11. [Mibew Google Maps plugin](https://github.com/Mibew/google-maps-plugin)
|
|
||||||
12. [Mibew Open Street Map plugin](https://github.com/Mibew/open-street-map-plugin)
|
|
||||||
13. [Mibew Operator Status plugin](https://github.com/Mibew/mibew-operator-status-plugin)
|
|
||||||
14. [Mibew Purge History plugin](https://github.com/Mibew/purge-history-plugin)
|
|
||||||
15. [Mibew Real Ban plugin](https://github.com/Mibew/real-ban-plugin)
|
|
||||||
16. [Mibew Slack plugin](https://github.com/Mibew/mibew_slack)
|
|
||||||
17. [Mibew Title Notification plugin](https://github.com/Mibew/title-notification-plugin)
|
|
||||||
|
|
||||||
#### Not ready for production use (not stable, broken, obsolete, etc.)
|
|
||||||
|
|
||||||
1. [Mibew External API plugin](https://github.com/Mibew/external-api-plugin)
|
|
BIN
docs/design/abstract_button.psd
Normal file
BIN
docs/design/abstract_button_narrow.psd
Normal file
BIN
docs/design/he/he_off.psd
Normal file
BIN
docs/design/he/he_on.psd
Normal file
BIN
docs/design/logo.psd
Normal file
BIN
docs/design/logo/16x16.gif
Normal file
After Width: | Height: | Size: 348 B |
BIN
docs/design/logo/32x32.gif
Normal file
After Width: | Height: | Size: 796 B |
BIN
docs/design/logo/64x64.gif
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
docs/design/message_history.psd
Normal file
BIN
docs/design/shablon-knopka_en.psd
Normal file
@ -1,4 +0,0 @@
|
|||||||
{
|
|
||||||
"directory": "./mibew/js/vendor",
|
|
||||||
"analytics": false
|
|
||||||
}
|
|
@ -1,27 +0,0 @@
|
|||||||
{
|
|
||||||
"extends": "eslint:recommended",
|
|
||||||
"rules": {
|
|
||||||
"indent": ["error", 4, {"SwitchCase": 1}],
|
|
||||||
"no-trailing-spaces": "error",
|
|
||||||
"semi": ["error", "always"],
|
|
||||||
"guard-for-in": "error",
|
|
||||||
"no-unused-vars": ["error", {"caughtErrors": "none", "args": "none"}]
|
|
||||||
},
|
|
||||||
"globals": {
|
|
||||||
"Mibew": true,
|
|
||||||
"MibewAPI": true,
|
|
||||||
"MibewAPIInteraction": true,
|
|
||||||
"MibewAPIChatInteraction": true,
|
|
||||||
"MibewAPIUsersInteraction": true,
|
|
||||||
"MibewAPIExecutionContext": true,
|
|
||||||
"Handlebars": true,
|
|
||||||
"_": true,
|
|
||||||
"Backbone": true,
|
|
||||||
"jQuery": true,
|
|
||||||
"vex": true,
|
|
||||||
"validator": true
|
|
||||||
},
|
|
||||||
"env":{
|
|
||||||
"browser": true
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,17 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "mibew",
|
|
||||||
"private": true,
|
|
||||||
"dependencies": {
|
|
||||||
"underscore": "1.8.2",
|
|
||||||
"json": "https://github.com/douglascrockford/JSON-js.git#c98948ae1944a28e2e8ebc3717894e580aeaaa05",
|
|
||||||
"jquery": "1.11.3",
|
|
||||||
"backbone": "1.1.2",
|
|
||||||
"marionette": "2.4.1",
|
|
||||||
"handlebars": "4.3.0",
|
|
||||||
"vex": "2.3.2",
|
|
||||||
"validator-js": "3.40.0"
|
|
||||||
},
|
|
||||||
"resolutions": {
|
|
||||||
"underscore": "1.8.2"
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,51 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "mibew/mibew",
|
|
||||||
"version": "3.6.0",
|
|
||||||
"description": "Mibew Messenger - open-source live support application",
|
|
||||||
"type": "project",
|
|
||||||
"homepage": "https://mibew.org",
|
|
||||||
"license": "Apache-2.0",
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Mibew Messenger Project",
|
|
||||||
"homepage": "https://mibew.org/credits"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"support": {
|
|
||||||
"email": "support@mibew.org",
|
|
||||||
"issues": "https://github.com/mibew/mibew/issues",
|
|
||||||
"forum": "https://mibew.org/forums",
|
|
||||||
"source": "https://github.com/mibew/mibew"
|
|
||||||
},
|
|
||||||
"repositories": [
|
|
||||||
{
|
|
||||||
"type": "vcs",
|
|
||||||
"url": "https://github.com/mibew/handlebars.php"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "vcs",
|
|
||||||
"url": "https://github.com/mibew/handlebars.php-helpers"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"require": {
|
|
||||||
"mibew/handlebars.php": "~0.10.5",
|
|
||||||
"mibew/handlebars.php-helpers": "1.*",
|
|
||||||
"symfony/http-foundation": "4.4.*",
|
|
||||||
"symfony/routing": "4.4.*",
|
|
||||||
"symfony/config": "4.4.*",
|
|
||||||
"symfony/yaml": "^5.2",
|
|
||||||
"symfony/translation": "2.6.*",
|
|
||||||
"tedivm/stash": "0.12.*",
|
|
||||||
"mibew/html5": "1.1.*",
|
|
||||||
"vierbergenlars/php-semver": "3.0.*",
|
|
||||||
"swiftmailer/swiftmailer": "~5.4.0",
|
|
||||||
"ua-parser/uap-php": "^3.9",
|
|
||||||
"true/punycode": "~1.1"
|
|
||||||
},
|
|
||||||
"require-dev": {
|
|
||||||
"squizlabs/php_codesniffer": "3.*"
|
|
||||||
},
|
|
||||||
"config": {
|
|
||||||
"vendor-dir": "mibew/vendor"
|
|
||||||
}
|
|
||||||
}
|
|
743
src/gulpfile.js
@ -1,743 +0,0 @@
|
|||||||
// Initialize requirements
|
|
||||||
var fs = require('fs'),
|
|
||||||
https = require('https'),
|
|
||||||
exec = require('child_process').exec,
|
|
||||||
eventStream = require('event-stream'),
|
|
||||||
runSequence = require('gulp4-run-sequence'),
|
|
||||||
through = require('through2'),
|
|
||||||
lodash = require('lodash'),
|
|
||||||
PoFile = require('pofile'),
|
|
||||||
strftime = require('strftime'),
|
|
||||||
del = require('del'),
|
|
||||||
bower = require('bower'),
|
|
||||||
gulp = require('gulp'),
|
|
||||||
uglify = require('gulp-uglify'),
|
|
||||||
concat = require('gulp-concat'),
|
|
||||||
phpcs = require('gulp-phpcs'),
|
|
||||||
order = require('gulp-order'),
|
|
||||||
handlebars = require('gulp-handlebars'),
|
|
||||||
handlebarsEngine = require('handlebars'),
|
|
||||||
defineModule = require('gulp-define-module'),
|
|
||||||
header = require('gulp-header'),
|
|
||||||
zip = require('gulp-zip'),
|
|
||||||
tar = require('gulp-tar'),
|
|
||||||
gzip = require('gulp-gzip'),
|
|
||||||
chmod = require('gulp-chmod'),
|
|
||||||
xgettext = require('gulp-xgettext'),
|
|
||||||
concatPo = require('gulp-concat-po'),
|
|
||||||
rename = require('gulp-rename'),
|
|
||||||
eslint = require('gulp-eslint'),
|
|
||||||
removeDuplicateHeaders = require('mibew-gulp-greh'),
|
|
||||||
mkdirp = require('mkdirp');
|
|
||||||
|
|
||||||
// Set global configuration
|
|
||||||
var config = {
|
|
||||||
mibewPath: 'mibew',
|
|
||||||
configsPath: 'mibew/configs',
|
|
||||||
phpVendorPath: 'mibew/vendor',
|
|
||||||
jsVendorPath: 'mibew/js/vendor',
|
|
||||||
pluginsPath: 'mibew/plugins',
|
|
||||||
avatarsPath: 'mibew/files/avatar',
|
|
||||||
cachePath: 'mibew/cache',
|
|
||||||
jsPath: 'mibew/js',
|
|
||||||
chatStylesPath: 'mibew/styles/chats',
|
|
||||||
pageStylesPath: 'mibew/styles/pages',
|
|
||||||
i18nPath: 'i18n',
|
|
||||||
i18nPrefix: 'mibew-i18n-',
|
|
||||||
releasePath: 'release',
|
|
||||||
uploadPath: 'upload',
|
|
||||||
compiledTemplatesHeader: fs.readFileSync('tools/compiled_templates_header.txt'),
|
|
||||||
getComposerUrl: 'https://getcomposer.org/installer',
|
|
||||||
phpBin: 'php -d "suhosin.executor.include.whitelist = phar" -d "memory_limit=512M"',
|
|
||||||
package: require('./composer.json'),
|
|
||||||
msginit: 'msginit',
|
|
||||||
msgcat: 'msgcat'
|
|
||||||
}
|
|
||||||
config.i18nSuffix = '-' + config.package.version + '-' + strftime('%Y%m%d');
|
|
||||||
|
|
||||||
// Tasks for cleaning //////////////////
|
|
||||||
|
|
||||||
// Cleans all built files
|
|
||||||
gulp.task('clean', function(callback) {
|
|
||||||
return del([
|
|
||||||
config.releasePath,
|
|
||||||
'composer.lock',
|
|
||||||
config.phpVendorPath,
|
|
||||||
config.jsVendorPath,
|
|
||||||
config.jsPath + '/compiled/**/*',
|
|
||||||
'!' + config.jsPath + '/compiled/.keep',
|
|
||||||
config.chatStylesPath + '/*/templates_compiled/client_side/*.js',
|
|
||||||
config.chatStylesPath + '/*/js/compiled/*.js',
|
|
||||||
config.pageStylesPath + '/*/templates_compiled/client_side/*.js'
|
|
||||||
], callback);
|
|
||||||
});
|
|
||||||
|
|
||||||
// Cleans temporary English translation in the release dir
|
|
||||||
gulp.task('clean-tmp-po', function(callback) {
|
|
||||||
return del([config.releasePath + '/translation.po'], callback);
|
|
||||||
});
|
|
||||||
|
|
||||||
// Cleans temporary files of translations in the release dir
|
|
||||||
gulp.task('clean-tmp-i18n-files', function(callback) {
|
|
||||||
return del([
|
|
||||||
config.releasePath + '/**/*',
|
|
||||||
'!' + config.releasePath + '/*.zip',
|
|
||||||
'!' + config.releasePath + '/*.tar.gz',
|
|
||||||
'!' + config.releasePath + '/*.pot'
|
|
||||||
], callback);
|
|
||||||
});
|
|
||||||
|
|
||||||
// Cleans all files prepared for uploading to CDN
|
|
||||||
gulp.task('clean-upload', function(callback) {
|
|
||||||
return del([config.uploadPath], callback);
|
|
||||||
});
|
|
||||||
|
|
||||||
// Cleans everything
|
|
||||||
gulp.task('clean-all', function(callback) {
|
|
||||||
runSequence( ['clean', 'clean-upload'],
|
|
||||||
callback );
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
// Watcher tasks ///////////////////////
|
|
||||||
|
|
||||||
// Watch styles
|
|
||||||
gulp.task('watch', function() {
|
|
||||||
gulp.watch(config.pageStylesPath + '/**/*.handlebars', gulp.series('page-styles'));
|
|
||||||
gulp.watch(config.chatStylesPath + '/**/js/source/**/*.js', gulp.series('chat-styles-js'));
|
|
||||||
gulp.watch(config.chatStylesPath + '/**/*.handlebars', gulp.series('chat-styles-handlebars'));
|
|
||||||
});
|
|
||||||
|
|
||||||
// Service tasks //////////////////
|
|
||||||
|
|
||||||
// Get and install PHP Composer
|
|
||||||
gulp.task('get-composer', function(callback) {
|
|
||||||
// Check whether Composer is already in place
|
|
||||||
if (fs.existsSync('./composer.phar')) {
|
|
||||||
callback(null);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get installer from the Internet
|
|
||||||
https.get(config.getComposerUrl, function(response) {
|
|
||||||
// Run PHP to install Composer
|
|
||||||
var php = exec(config.phpBin, function(error, stdout, stderr) {
|
|
||||||
callback(error ? stderr : null);
|
|
||||||
});
|
|
||||||
// Pass installer code to PHP via STDIN
|
|
||||||
response.pipe(php.stdin);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// Install Composer dependencies excluding development ones
|
|
||||||
gulp.task('composer-install', gulp.series('get-composer', function(callback) {
|
|
||||||
exec(config.phpBin + ' composer.phar install --no-dev',
|
|
||||||
function(error, stdout, stderr) {
|
|
||||||
callback(error ? stderr : null);
|
|
||||||
});
|
|
||||||
}));
|
|
||||||
|
|
||||||
// Install all Composer dependencies
|
|
||||||
gulp.task('composer-install-dev', gulp.series('get-composer', function(callback) {
|
|
||||||
exec(config.phpBin + ' composer.phar install',
|
|
||||||
function(error, stdout, stderr) {
|
|
||||||
callback(error ? stderr : null);
|
|
||||||
});
|
|
||||||
}));
|
|
||||||
|
|
||||||
// Installs bower dependencies
|
|
||||||
gulp.task('bower-install', function(callback) {
|
|
||||||
bower.commands.install([], {}, {})
|
|
||||||
.on('error', function(error) {
|
|
||||||
callback(error);
|
|
||||||
})
|
|
||||||
.on('end', function() {
|
|
||||||
// We should manually minify JavaScript files that was not minified
|
|
||||||
// by bower packages' authors
|
|
||||||
// TODO: This is a temproary workaround and should be removed once
|
|
||||||
// the packages will be fixed
|
|
||||||
var stream = eventStream.merge(
|
|
||||||
gulp.src(config.jsVendorPath + '/backbone/backbone.js',
|
|
||||||
{base: config.jsVendorPath})
|
|
||||||
.pipe(uglify({preserveComments: 'some'}))
|
|
||||||
// There are neither "@license" tag nor "!preserve" in the
|
|
||||||
// header. Add the header manually
|
|
||||||
.pipe(header(
|
|
||||||
"// Backbone.js 1.1.2\n"
|
|
||||||
+ "// (c) 2010-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n"
|
|
||||||
+ "// Backbone may be freely distributed under the MIT license.\n"
|
|
||||||
+ "// For all details and documentation:\n"
|
|
||||||
+ "// http://backbonejs.org\n"
|
|
||||||
))
|
|
||||||
.pipe(rename('backbone/backbone-min.js')),
|
|
||||||
gulp.src(config.jsVendorPath + '/json/json2.js',
|
|
||||||
{base: config.jsVendorPath})
|
|
||||||
.pipe(uglify({preserveComments: 'some'}))
|
|
||||||
// There are neither "@license" tag nor "!preserve" in the
|
|
||||||
// header, add the header manually
|
|
||||||
.pipe(header("// json2.js. Public Domain. See http://www.JSON.org/js.html\n"))
|
|
||||||
.pipe(rename('json/json2.min.js'))
|
|
||||||
)
|
|
||||||
.pipe(gulp.dest(config.jsVendorPath));
|
|
||||||
|
|
||||||
stream
|
|
||||||
.on('error', callback)
|
|
||||||
.on('end', callback);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// Tasks for checking //////////////////
|
|
||||||
|
|
||||||
// Checks all PHP files with PHP Code Sniffer
|
|
||||||
gulp.task('phpcs', gulp.series('composer-install-dev', function() {
|
|
||||||
return gulp.src([
|
|
||||||
config.mibewPath + '/**/*.php',
|
|
||||||
'!' + config.phpVendorPath + '/**/*.*',
|
|
||||||
'!' + config.pluginsPath + '/**/*.*',
|
|
||||||
'!' + config.cachePath + '/**/*.*'
|
|
||||||
], {
|
|
||||||
// Content of the cache directory is readable only for webserver.
|
|
||||||
// Thus we must to set "strict" option to false to prevent "EACCES"
|
|
||||||
// errors. At the same we need to see all errors that take place.
|
|
||||||
strict: false,
|
|
||||||
silent: false
|
|
||||||
})
|
|
||||||
.pipe(phpcs({
|
|
||||||
bin: config.phpVendorPath + '/bin/phpcs',
|
|
||||||
standard: 'PSR2',
|
|
||||||
warningSeverity: 0
|
|
||||||
}))
|
|
||||||
.pipe(phpcs.reporter('log'))
|
|
||||||
.pipe(phpcs.reporter('fail'));
|
|
||||||
}));
|
|
||||||
|
|
||||||
// Checks all JavaScript Source files with ESLint
|
|
||||||
gulp.task('eslint', function() {
|
|
||||||
return gulp.src(config.jsPath + '/source/**/*.js')
|
|
||||||
.pipe(eslint())
|
|
||||||
.pipe(eslint.format())
|
|
||||||
.pipe(eslint.failAfterError());
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
// Restore empty English translation in the source code
|
|
||||||
gulp.task('post-pack-cleanup', function(callback) {
|
|
||||||
gulp.src('translation.po')
|
|
||||||
.pipe(gulp.dest(config.mibewPath + '/locales/en/'));
|
|
||||||
|
|
||||||
del(['translation.po', config.releasePath + '/translation.po'], callback);
|
|
||||||
});
|
|
||||||
|
|
||||||
// Tasks of compiling //////////////////
|
|
||||||
|
|
||||||
// Compile all JavaScript files of the Mibew Messenger Core
|
|
||||||
gulp.task('js', function() {
|
|
||||||
return eventStream.merge(
|
|
||||||
getClientSideApp('default'),
|
|
||||||
getClientSideApp('chat'),
|
|
||||||
getClientSideApp('thread_log'),
|
|
||||||
getClientSideApp('users'),
|
|
||||||
gulp.src(config.jsPath + '/source/**/*.js')
|
|
||||||
)
|
|
||||||
.pipe(uglify({preserveComments: 'some'}))
|
|
||||||
.pipe(removeDuplicateHeaders())
|
|
||||||
.pipe(gulp.dest(config.jsPath + '/compiled'));
|
|
||||||
});
|
|
||||||
|
|
||||||
// Compile and concatenate Handlebars templates for all chat styles
|
|
||||||
gulp.task('chat-styles-handlebars', function() {
|
|
||||||
return getChildDirs(config.chatStylesPath)
|
|
||||||
.then(function (dirs) {
|
|
||||||
return Promise.all(dirs.map(function (dir) {
|
|
||||||
return new Promise(function(resolve, reject) {
|
|
||||||
gulp.src(config.chatStylesPath + '/' + dir
|
|
||||||
+ '/templates_src/client_side/**/*.handlebars')
|
|
||||||
.pipe(handlebars({
|
|
||||||
// Use specific version of Handlebars.js
|
|
||||||
handlebars: handlebarsEngine
|
|
||||||
}))
|
|
||||||
.pipe(wrapHandlebarsTemplate())
|
|
||||||
.pipe(concat('templates.js'))
|
|
||||||
.pipe(uglify({preserveComments: 'some'}))
|
|
||||||
.pipe(header(config.compiledTemplatesHeader))
|
|
||||||
.pipe(gulp.dest(config.chatStylesPath + '/' + dir
|
|
||||||
+ '/templates_compiled/client_side'))
|
|
||||||
.on('end', resolve)
|
|
||||||
.on('error', reject);
|
|
||||||
});
|
|
||||||
}));
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// Compile and concatenate js files for all chat styles
|
|
||||||
gulp.task('chat-styles-js', function() {
|
|
||||||
return getChildDirs(config.chatStylesPath)
|
|
||||||
.then(function (dirs) {
|
|
||||||
return Promise.all(dirs.map(function (dir) {
|
|
||||||
return new Promise(function(resolve, reject) {
|
|
||||||
gulp.src(config.chatStylesPath + '/' + dir
|
|
||||||
+ '/js/source/**/*.js')
|
|
||||||
.pipe(concat('scripts.js'))
|
|
||||||
.pipe(uglify({preserveComments: 'some'}))
|
|
||||||
.pipe(gulp.dest(config.chatStylesPath + '/' + dir
|
|
||||||
+ '/js/compiled'))
|
|
||||||
.on('end', resolve)
|
|
||||||
.on('error', reject);
|
|
||||||
});
|
|
||||||
}));
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// Performs all job related to pages styles
|
|
||||||
gulp.task('page-styles', function() {
|
|
||||||
return getChildDirs(config.pageStylesPath)
|
|
||||||
.then(function (dirs) {
|
|
||||||
return Promise.all(dirs.map(function (dir) {
|
|
||||||
return new Promise(function(resolve, reject){
|
|
||||||
gulp.src(config.pageStylesPath + '/' + dir
|
|
||||||
+ '/templates_src/client_side/**/*.handlebars')
|
|
||||||
.pipe(handlebars({
|
|
||||||
// Use specific version of Handlebars.js
|
|
||||||
handlebars: handlebarsEngine
|
|
||||||
}))
|
|
||||||
.pipe(wrapHandlebarsTemplate())
|
|
||||||
.pipe(concat('templates.js'))
|
|
||||||
.pipe(uglify({preserveComments: 'some'}))
|
|
||||||
.pipe(header(config.compiledTemplatesHeader))
|
|
||||||
.pipe(gulp.dest(config.pageStylesPath + '/' + dir
|
|
||||||
+ '/templates_compiled/client_side'))
|
|
||||||
.on('end', resolve)
|
|
||||||
.on('error', reject);
|
|
||||||
});
|
|
||||||
}));
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// Performs all job related to chat styles
|
|
||||||
gulp.task('chat-styles', gulp.series('chat-styles-handlebars', 'chat-styles-js'));
|
|
||||||
|
|
||||||
// Prepares ready to use development version of Mibew Messenger without
|
|
||||||
// packing or validating it
|
|
||||||
gulp.task('rebuild', function(callback) {
|
|
||||||
runSequence(
|
|
||||||
'clean',
|
|
||||||
['js', 'chat-styles', 'page-styles', 'composer-install',
|
|
||||||
'bower-install'],
|
|
||||||
callback
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
// Tasks for localization issues ///////
|
|
||||||
|
|
||||||
// Generate POT-file based upon the source code
|
|
||||||
gulp.task('generate-pot', function() {
|
|
||||||
return eventStream.merge(
|
|
||||||
gulp.src([
|
|
||||||
config.mibewPath + '/**/*.php',
|
|
||||||
'!' + config.phpVendorPath + '/**/*.*',
|
|
||||||
'!' + config.pluginsPath + '/**/*.*',
|
|
||||||
'!' + config.cachePath + '/**/*.*'
|
|
||||||
], {
|
|
||||||
// Content of the cache directory is readable only for
|
|
||||||
// webserver. Thus we must to set "strict" option to false
|
|
||||||
// to prevent "EACCES" errors. At the same we need to see all
|
|
||||||
// errors that take place.
|
|
||||||
strict: false,
|
|
||||||
silent: false
|
|
||||||
})
|
|
||||||
.pipe(xgettext({
|
|
||||||
language: 'PHP',
|
|
||||||
keywords: [
|
|
||||||
{name: 'getlocal'},
|
|
||||||
{name: 'no_field'},
|
|
||||||
{name: 'wrong_field'},
|
|
||||||
{name: 'failed_uploading_file', singular: 2}
|
|
||||||
]
|
|
||||||
})),
|
|
||||||
gulp.src(config.jsPath + '/source/**/*.js', {base: config.mibewPath})
|
|
||||||
.pipe(xgettext({
|
|
||||||
language: 'JavaScript',
|
|
||||||
keywords: [
|
|
||||||
{name: 'trans'}
|
|
||||||
]
|
|
||||||
})),
|
|
||||||
gulp.src([
|
|
||||||
config.chatStylesPath + '/default/templates_src/**/*.handlebars',
|
|
||||||
config.pageStylesPath + '/default/templates_src/**/*.handlebars'
|
|
||||||
], {base: config.mibewPath})
|
|
||||||
.pipe(xgettextHandlebars())
|
|
||||||
)
|
|
||||||
.pipe(concatPo(config.i18nPrefix + 'translation'
|
|
||||||
+ config.i18nSuffix + '.pot',
|
|
||||||
{
|
|
||||||
headers: {
|
|
||||||
'Project-Id-Version': 'Mibew Messenger '
|
|
||||||
+ config.package.version,
|
|
||||||
'Report-Msgid-Bugs-To': config.package.support.email,
|
|
||||||
'POT-Creation-Date': strftime('%Y-%m-%d %H:%M%z'),
|
|
||||||
'PO-Revision-Date': '',
|
|
||||||
'Last-Translator': '',
|
|
||||||
'Language-Team': '',
|
|
||||||
'Content-Type': 'text/plain; charset=UTF-8'
|
|
||||||
}
|
|
||||||
})
|
|
||||||
)
|
|
||||||
.pipe(gulp.dest(config.releasePath));
|
|
||||||
});
|
|
||||||
|
|
||||||
// Generate temporary English translation to be used in the release
|
|
||||||
gulp.task('generate-tmp-po', gulp.series('generate-pot', function(callback) {
|
|
||||||
return exec(config.msginit + ' --no-translator --no-wrap -i '
|
|
||||||
+ config.releasePath + '/' + config.i18nPrefix + 'translation'
|
|
||||||
+ config.i18nSuffix + '.pot' + ' -l en -o '
|
|
||||||
+ config.releasePath + '/translation.po',
|
|
||||||
function(error, stdout, stderr) {
|
|
||||||
callback(error ? stderr : null);
|
|
||||||
});
|
|
||||||
}));
|
|
||||||
|
|
||||||
// Generate complete translations (that includes missed strings) to be used
|
|
||||||
// in the release
|
|
||||||
gulp.task('generate-pos', gulp.series('generate-tmp-po', function(callback) {
|
|
||||||
|
|
||||||
return getChildDirs(config.i18nPath + '/translations')
|
|
||||||
.then(function (dirs) {
|
|
||||||
return Promise.all(dirs.map(function (dir) {
|
|
||||||
return new Promise(function(resolve, reject) {
|
|
||||||
mkdirp(config.releasePath + '/' + dir, function (error) {
|
|
||||||
if (error) {
|
|
||||||
reject(error);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
exec(config.msgcat + ' ' + config.i18nPath + '/translations/'
|
|
||||||
+ dir + '/translation.po ' + config.releasePath
|
|
||||||
+ '/translation.po --no-location --no-wrap --use-first'
|
|
||||||
+ ' -o ' + config.releasePath + '/' + dir
|
|
||||||
+ '/translation.po',
|
|
||||||
function(error, stdout, stderr) {
|
|
||||||
if (error) {
|
|
||||||
reject(error);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
var sources = [
|
|
||||||
config.i18nPath + '/translations/' + dir + '/**/*',
|
|
||||||
'!' + config.i18nPath + '/translations/' + dir
|
|
||||||
+ '/translation.po'
|
|
||||||
];
|
|
||||||
|
|
||||||
gulp.src(sources)
|
|
||||||
.pipe(gulp.dest(config.releasePath + '/' + dir))
|
|
||||||
.on('error', reject)
|
|
||||||
.on('end', resolve);
|
|
||||||
});
|
|
||||||
}));
|
|
||||||
});
|
|
||||||
}));
|
|
||||||
|
|
||||||
// Packaging tasks /////////////////////
|
|
||||||
|
|
||||||
// Pack sources for release as .zip and .tar.gz archives
|
|
||||||
gulp.task('pack-sources', gulp.series('composer-install', 'bower-install', function() {
|
|
||||||
gulp.src(config.mibewPath + '/locales/en/translation.po')
|
|
||||||
.pipe(gulp.dest('.'));
|
|
||||||
gulp.src(config.releasePath + '/translation.po')
|
|
||||||
.pipe(gulp.dest(config.mibewPath + '/locales/en/'));
|
|
||||||
|
|
||||||
var sources = [
|
|
||||||
config.mibewPath + '/**/*',
|
|
||||||
// Exclude user's config
|
|
||||||
'!' + config.configsPath + '/config.yml',
|
|
||||||
// Exclude cache files but not the ".keep" file.
|
|
||||||
'!' + config.cachePath + '/**/!(.keep)',
|
|
||||||
// Exclude avatars but not the ".keep" file.
|
|
||||||
'!' + config.avatarsPath + '/!(.keep)',
|
|
||||||
// Exclude plugins but not the ".keep" file.
|
|
||||||
'!' + config.pluginsPath + '/!(.keep)',
|
|
||||||
'!' + config.pluginsPath + '/*/**/*',
|
|
||||||
// Exclude Git repositories that can be shipped with third-party libs
|
|
||||||
'!' + config.phpVendorPath + '/**/.git',
|
|
||||||
'!' + config.phpVendorPath + '/**/.git/**/*',
|
|
||||||
// Exclude vendors binaries
|
|
||||||
'!' + config.phpVendorPath + '/bin/**/*',
|
|
||||||
// Exclude JavaScript sources
|
|
||||||
'!' + config.jsPath + '/source/**/*',
|
|
||||||
// Actually we does not need backbone.babysitter and backbone.wreqr
|
|
||||||
// dependencies because they embed into marionette.js. So we exclude
|
|
||||||
// "backbone.babysitter" and "backbone.wreqr" directories and all their
|
|
||||||
// contents.
|
|
||||||
'!' + config.jsVendorPath + '/backbone.babysitter{,/**}',
|
|
||||||
'!' + config.jsVendorPath + '/backbone.wreqr{,/**}',
|
|
||||||
// Exclude dot files within third-party JS libraries.
|
|
||||||
'!' + config.jsVendorPath + '/**/.*',
|
|
||||||
// Exclude config files of various package systems
|
|
||||||
'!' + config.jsVendorPath + '/**/{bower,component,package,composer}.json',
|
|
||||||
// Exclude config files of various build systems
|
|
||||||
'!' + config.jsVendorPath + '/**/Gruntfile.*',
|
|
||||||
'!' + config.jsVendorPath + '/**/gulpfile.*',
|
|
||||||
'!' + config.jsVendorPath + '/**/Makefile',
|
|
||||||
// Exclude HTML files from third-party JS libraries. Such files can be
|
|
||||||
// used for docs or for tests, we need none of them.
|
|
||||||
'!' + config.jsVendorPath + '/**/*.html',
|
|
||||||
// There are too many useless files in Vex.js library. Exclude them.
|
|
||||||
'!' + config.jsVendorPath + '/vex/sass{,/**}',
|
|
||||||
'!' + config.jsVendorPath + '/vex/docs{,/**}',
|
|
||||||
'!' + config.jsVendorPath + '/vex/docs{,/**}',
|
|
||||||
'!' + config.jsVendorPath + '/vex/coffee{,/**}'
|
|
||||||
];
|
|
||||||
var srcOptions = {
|
|
||||||
// Dot files (.htaccess, .keep, etc.) must be included in the package
|
|
||||||
dot: true,
|
|
||||||
// Content of the cache directory is readable only for webserver. Thus
|
|
||||||
// we must to set "strict" option to false to prevent "EACCES" errors.
|
|
||||||
// At the same we need to see all errors that take place.
|
|
||||||
strict: false,
|
|
||||||
silent: false,
|
|
||||||
// Preserve root directory name (i.e. 'mibew/')
|
|
||||||
base: '.'
|
|
||||||
}
|
|
||||||
var version = config.package.version;
|
|
||||||
|
|
||||||
return eventStream.merge(
|
|
||||||
gulp.src(sources, srcOptions)
|
|
||||||
.pipe(zip('mibew-' + version + '.zip')),
|
|
||||||
gulp.src(sources, srcOptions)
|
|
||||||
.pipe(tar('mibew-' + version + '.tar'))
|
|
||||||
.pipe(gzip())
|
|
||||||
)
|
|
||||||
.pipe(chmod(644))
|
|
||||||
.pipe(gulp.dest(config.releasePath));
|
|
||||||
}));
|
|
||||||
|
|
||||||
// Pack translations for release as .zip and .tar.gz archives
|
|
||||||
gulp.task('pack-i18n', function(callback) {
|
|
||||||
return getChildDirs(config.i18nPath + '/translations')
|
|
||||||
.then(function (dirs) {
|
|
||||||
return Promise.all(dirs.map(function (dir) {
|
|
||||||
return new Promise(function(resolve, reject) {
|
|
||||||
|
|
||||||
var srcOptions = {
|
|
||||||
base: config.releasePath
|
|
||||||
};
|
|
||||||
|
|
||||||
eventStream.merge(
|
|
||||||
gulp.src(config.releasePath + '/' + dir
|
|
||||||
+ '/**/*', srcOptions)
|
|
||||||
.pipe(zip(config.i18nPrefix + dir
|
|
||||||
+ config.i18nSuffix + '.zip')),
|
|
||||||
gulp.src(config.releasePath + '/' + dir
|
|
||||||
+ '/**/*', srcOptions)
|
|
||||||
.pipe(tar(config.i18nPrefix + dir
|
|
||||||
+ config.i18nSuffix + '.tar'))
|
|
||||||
.pipe(gzip())
|
|
||||||
)
|
|
||||||
.pipe(chmod(644))
|
|
||||||
.pipe(gulp.dest(config.releasePath))
|
|
||||||
.on('error', reject)
|
|
||||||
.on('end', resolve);
|
|
||||||
|
|
||||||
});
|
|
||||||
}));
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// Tasks of releasing //////////////////
|
|
||||||
|
|
||||||
// Prepare release of Mibew Messenger
|
|
||||||
gulp.task('prepare-release', function(callback) {
|
|
||||||
runSequence(
|
|
||||||
'clean',
|
|
||||||
['phpcs', 'js', 'chat-styles', 'page-styles', 'generate-pot',
|
|
||||||
'generate-tmp-po'],
|
|
||||||
'pack-sources',
|
|
||||||
'post-pack-cleanup',
|
|
||||||
callback
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
// Prepare releases of translations for Mibew Messenger
|
|
||||||
gulp.task('prepare-i18n-release', function(callback) {
|
|
||||||
runSequence( 'clean-tmp-po',
|
|
||||||
'generate-pos',
|
|
||||||
'pack-i18n',
|
|
||||||
'clean-tmp-i18n-files',
|
|
||||||
callback
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
// Mirror prepared releases of Mibew Messenger and its translations in a form
|
|
||||||
// intended for uploading into the CDN
|
|
||||||
gulp.task('prepare-for-upload', function(callback) {
|
|
||||||
gulp.src(config.releasePath + '/mibew-' + config.package.version + '.*')
|
|
||||||
.pipe(gulp.dest(config.uploadPath + '/core/' + config.package.version + '/'));
|
|
||||||
|
|
||||||
gulp.src(config.releasePath + '/mibew-i18n-translation-' + config.package.version + '-*.pot')
|
|
||||||
.pipe(gulp.dest(config.uploadPath + '/i18n/_pot/' + config.package.version + '/'));
|
|
||||||
|
|
||||||
return getChildDirs(config.i18nPath + '/translations')
|
|
||||||
.then(function (dirs) {
|
|
||||||
return Promise.all(dirs.map(function (dir) {
|
|
||||||
return new Promise(function(resolve, reject) {
|
|
||||||
gulp.src(config.releasePath + '/mibew-i18n-' + dir + '-' + config.package.version + '-*.*')
|
|
||||||
.pipe(gulp.dest(config.uploadPath + '/i18n/' + dir + '/' + config.package.version + '/'))
|
|
||||||
.on('error', reject)
|
|
||||||
.on('end', resolve);
|
|
||||||
});
|
|
||||||
}));
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// Perform all preparations before uploading the release of Mibew Messenger and
|
|
||||||
// its translations into the CDN
|
|
||||||
gulp.task('prepare-all', function(callback) {
|
|
||||||
runSequence('clean-all', 'prepare-release', 'prepare-i18n-release',
|
|
||||||
'prepare-for-upload', callback);
|
|
||||||
});
|
|
||||||
|
|
||||||
// Prepare release archives of the development version of Mibew Messenger
|
|
||||||
gulp.task('default', function(callback) {
|
|
||||||
runSequence(
|
|
||||||
'clean',
|
|
||||||
['js', 'chat-styles', 'page-styles', 'generate-tmp-po'],
|
|
||||||
'pack-sources',
|
|
||||||
['post-pack-cleanup', 'clean-tmp-po'],
|
|
||||||
callback
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Loads and prepare js file for a client side application with the specified
|
|
||||||
* name.
|
|
||||||
*
|
|
||||||
* @param {String} name Application name.
|
|
||||||
* @returns A files stream that can be piped to any gulp plugin.
|
|
||||||
*/
|
|
||||||
var getClientSideApp = function(name) {
|
|
||||||
var appSource = config.jsPath + '/source/' + name;
|
|
||||||
|
|
||||||
return gulp.src(appSource + '/**/*.js')
|
|
||||||
.pipe(order(
|
|
||||||
[
|
|
||||||
appSource + '/init.js',
|
|
||||||
// The following line is equivalent to
|
|
||||||
// gulp.src([appSource + '/*.js', '!' + appSource + '/app.js']);
|
|
||||||
appSource + '/!(app).js',
|
|
||||||
appSource + '/models/**/base*.js',
|
|
||||||
appSource + '/models/**/*.js',
|
|
||||||
appSource + '/collections/**/base*.js',
|
|
||||||
appSource + '/collections/**/*.js',
|
|
||||||
appSource + '/model_views/**/base*.js',
|
|
||||||
appSource + '/model_views/**/*.js',
|
|
||||||
appSource + '/collection_views/**/base*.js',
|
|
||||||
appSource + '/collection_views/**/*.js',
|
|
||||||
appSource + '/regions/**/base*.js',
|
|
||||||
appSource + '/regions/**/*.js',
|
|
||||||
appSource + '/layouts/**/base*.js',
|
|
||||||
appSource + '/layouts/**/*.js',
|
|
||||||
appSource + '/**/base*.js',
|
|
||||||
// The following line is equivalent to
|
|
||||||
// gulp.src([appSource + '/**/*.js', '!' + appSource + '/app.js']);
|
|
||||||
'!' + appSource + '/app.js',
|
|
||||||
appSource + '/app.js'
|
|
||||||
],
|
|
||||||
{base: process.cwd()}
|
|
||||||
))
|
|
||||||
.pipe(concat(name + '_app.js'));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Wraps a handlebars template with a function and attach it to the
|
|
||||||
* Handlebars.templates object.
|
|
||||||
*
|
|
||||||
* @returns {Function} A function that can be used in pipe() method of a file
|
|
||||||
* stream right after gulp-handlebars plugin.
|
|
||||||
*/
|
|
||||||
var wrapHandlebarsTemplate = function() {
|
|
||||||
return defineModule('plain', {
|
|
||||||
wrapper: '(function() {\n'
|
|
||||||
+ 'var templates = Handlebars.templates = Handlebars.templates || {};\n'
|
|
||||||
+ 'Handlebars.templates["<%= relative %>"] = <%= handlebars %>;\n'
|
|
||||||
+ '})()',
|
|
||||||
context: function(context) {
|
|
||||||
return {relative: context.file.relative.replace(/\.js$/, '').replace(/\\/g, '/')};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Extracts gettext messages from handlebars templates.
|
|
||||||
*
|
|
||||||
* @returns {Function} A function that can be used in pipe() method of a file
|
|
||||||
* stream.
|
|
||||||
*/
|
|
||||||
var xgettextHandlebars = function() {
|
|
||||||
var helperRegExp = /\{{2}l10n\s*('|")(.*?[^\\])\1.*?\}{2}/g;
|
|
||||||
|
|
||||||
return through.obj(function (file, enc, callback) {
|
|
||||||
var po = new PoFile();
|
|
||||||
match = false,
|
|
||||||
contents = file.contents.toString();
|
|
||||||
|
|
||||||
while (match = helperRegExp.exec(contents)) {
|
|
||||||
// Try to find item in the .po file by its name
|
|
||||||
var item = lodash.find(po.items, function(item) {
|
|
||||||
return match[2] === item.msgid;
|
|
||||||
});
|
|
||||||
|
|
||||||
var line = contents.substr(0, match.index).split(/\r?\n|\r/g).length;
|
|
||||||
|
|
||||||
if (!item) {
|
|
||||||
// There is no such item, create new one
|
|
||||||
item = new PoFile.Item();
|
|
||||||
item.msgid = match[2].replace(/\\'/g, "'").replace(/\\"/g, '"');
|
|
||||||
po.items.push(item);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add new reference
|
|
||||||
item.references.push(file.relative + ':' + line);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update file contents
|
|
||||||
file.contents = Buffer.from(po.toString());
|
|
||||||
this.push(file);
|
|
||||||
|
|
||||||
callback();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieves list of all dirs which are placed in the specified one.
|
|
||||||
*
|
|
||||||
* @param {String} srcDir A dir to search.
|
|
||||||
* @returns Promise A promise which will be resolved with list of child dirs or
|
|
||||||
* rejected with the occured error.
|
|
||||||
*/
|
|
||||||
var getChildDirs = function(srcDir) {
|
|
||||||
return (new Promise(function(resolve, reject) {
|
|
||||||
fs.readdir(srcDir, function (err, files) {
|
|
||||||
if (err) {
|
|
||||||
reject(err);
|
|
||||||
} else {
|
|
||||||
resolve(files);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
})).then(function (files) {
|
|
||||||
// Replace all files that are not a directory with nulls.
|
|
||||||
return Promise.all(files.map(function (file) {
|
|
||||||
return new Promise(function (resolve, reject) {
|
|
||||||
fs.lstat(srcDir + '/' + file, function (err, stat) {
|
|
||||||
if (err) {
|
|
||||||
reject(err);
|
|
||||||
} else {
|
|
||||||
resolve(stat.isDirectory() ? file : null);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}));
|
|
||||||
}).then(function(dirs) {
|
|
||||||
// Remove all nulls from the array.
|
|
||||||
return dirs.filter(function (dir) {
|
|
||||||
return null !== dir;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
1
src/i18n
@ -1 +0,0 @@
|
|||||||
Subproject commit 55868d9973f531c3550575481bde4233cc625b91
|
|
5
src/messenger/.buildpath
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<buildpath>
|
||||||
|
<buildpathentry kind="src" path=""/>
|
||||||
|
<buildpathentry kind="con" path="org.eclipse.php.core.LANGUAGE"/>
|
||||||
|
</buildpath>
|
1
src/messenger/.idea/.name
Normal file
@ -0,0 +1 @@
|
|||||||
|
messenger
|
12
src/messenger/.idea/encodings.xml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false">
|
||||||
|
<file url="file://$PROJECT_DIR$" charset="UTF-8" />
|
||||||
|
<file url="file://$PROJECT_DIR$/webim/locales/bg/properties" charset="windows-1251" />
|
||||||
|
<file url="file://$PROJECT_DIR$/webim/locales/ca/properties" charset="ISO-8859-1" />
|
||||||
|
<file url="file://$PROJECT_DIR$/webim/locales/ru/properties" charset="windows-1251" />
|
||||||
|
<file url="file://$PROJECT_DIR$/webim/locales/sp/properties" charset="ISO-8859-1" />
|
||||||
|
<file url="file://$PROJECT_DIR$/webim/locales/ua/properties" charset="windows-1251" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
11
src/messenger/.idea/inspectionProfiles/Project_Default.xml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<component name="InspectionProjectProfileManager">
|
||||||
|
<profile version="1.0" is_locked="false">
|
||||||
|
<option name="myName" value="Project Default" />
|
||||||
|
<option name="myLocal" value="false" />
|
||||||
|
<inspection_tool class="SpellCheckingInspection" enabled="false" level="TYPO" enabled_by_default="false">
|
||||||
|
<option name="processCode" value="true" />
|
||||||
|
<option name="processLiterals" value="true" />
|
||||||
|
<option name="processComments" value="true" />
|
||||||
|
</inspection_tool>
|
||||||
|
</profile>
|
||||||
|
</component>
|
@ -0,0 +1,7 @@
|
|||||||
|
<component name="InspectionProjectProfileManager">
|
||||||
|
<settings>
|
||||||
|
<option name="PROJECT_PROFILE" value="Project Default" />
|
||||||
|
<option name="USE_PROJECT_PROFILE" value="true" />
|
||||||
|
<version value="1.0" />
|
||||||
|
</settings>
|
||||||
|
</component>
|
15
src/messenger/.idea/messenger.iml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="WEB_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager">
|
||||||
|
<content url="file://$MODULE_DIR$" />
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
<orderEntry type="module-library">
|
||||||
|
<library name="PHP">
|
||||||
|
<CLASSES />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</orderEntry>
|
||||||
|
</component>
|
||||||
|
</module>
|
||||||
|
|
11
src/messenger/.idea/misc.xml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="DependencyValidationManager">
|
||||||
|
<option name="SKIP_IMPORT_STATEMENTS" value="false" />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectResources">
|
||||||
|
<default-html-doctype>http://www.w3.org/1999/xhtml</default-html-doctype>
|
||||||
|
</component>
|
||||||
|
<component name="ProjectRootManager" version="2" />
|
||||||
|
</project>
|
||||||
|
|
9
src/messenger/.idea/modules.xml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/messenger.iml" filepath="$PROJECT_DIR$/.idea/messenger.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
80
src/messenger/.idea/projectCodeStyle.xml
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="CodeStyleSettingsManager">
|
||||||
|
<option name="PER_PROJECT_SETTINGS">
|
||||||
|
<value>
|
||||||
|
<ADDITIONAL_INDENT_OPTIONS fileType="js">
|
||||||
|
<option name="INDENT_SIZE" value="4" />
|
||||||
|
<option name="CONTINUATION_INDENT_SIZE" value="8" />
|
||||||
|
<option name="TAB_SIZE" value="4" />
|
||||||
|
<option name="USE_TAB_CHARACTER" value="false" />
|
||||||
|
<option name="SMART_TABS" value="false" />
|
||||||
|
<option name="LABEL_INDENT_SIZE" value="0" />
|
||||||
|
<option name="LABEL_INDENT_ABSOLUTE" value="false" />
|
||||||
|
<option name="USE_RELATIVE_INDENTS" value="false" />
|
||||||
|
</ADDITIONAL_INDENT_OPTIONS>
|
||||||
|
<ADDITIONAL_INDENT_OPTIONS fileType="jsp">
|
||||||
|
<option name="INDENT_SIZE" value="4" />
|
||||||
|
<option name="CONTINUATION_INDENT_SIZE" value="8" />
|
||||||
|
<option name="TAB_SIZE" value="4" />
|
||||||
|
<option name="USE_TAB_CHARACTER" value="false" />
|
||||||
|
<option name="SMART_TABS" value="false" />
|
||||||
|
<option name="LABEL_INDENT_SIZE" value="0" />
|
||||||
|
<option name="LABEL_INDENT_ABSOLUTE" value="false" />
|
||||||
|
<option name="USE_RELATIVE_INDENTS" value="false" />
|
||||||
|
</ADDITIONAL_INDENT_OPTIONS>
|
||||||
|
<ADDITIONAL_INDENT_OPTIONS fileType="php">
|
||||||
|
<option name="INDENT_SIZE" value="4" />
|
||||||
|
<option name="CONTINUATION_INDENT_SIZE" value="8" />
|
||||||
|
<option name="TAB_SIZE" value="4" />
|
||||||
|
<option name="USE_TAB_CHARACTER" value="false" />
|
||||||
|
<option name="SMART_TABS" value="false" />
|
||||||
|
<option name="LABEL_INDENT_SIZE" value="0" />
|
||||||
|
<option name="LABEL_INDENT_ABSOLUTE" value="false" />
|
||||||
|
<option name="USE_RELATIVE_INDENTS" value="false" />
|
||||||
|
</ADDITIONAL_INDENT_OPTIONS>
|
||||||
|
<ADDITIONAL_INDENT_OPTIONS fileType="sass">
|
||||||
|
<option name="INDENT_SIZE" value="2" />
|
||||||
|
<option name="CONTINUATION_INDENT_SIZE" value="8" />
|
||||||
|
<option name="TAB_SIZE" value="4" />
|
||||||
|
<option name="USE_TAB_CHARACTER" value="false" />
|
||||||
|
<option name="SMART_TABS" value="false" />
|
||||||
|
<option name="LABEL_INDENT_SIZE" value="0" />
|
||||||
|
<option name="LABEL_INDENT_ABSOLUTE" value="false" />
|
||||||
|
<option name="USE_RELATIVE_INDENTS" value="false" />
|
||||||
|
</ADDITIONAL_INDENT_OPTIONS>
|
||||||
|
<ADDITIONAL_INDENT_OPTIONS fileType="sql">
|
||||||
|
<option name="INDENT_SIZE" value="2" />
|
||||||
|
<option name="CONTINUATION_INDENT_SIZE" value="8" />
|
||||||
|
<option name="TAB_SIZE" value="4" />
|
||||||
|
<option name="USE_TAB_CHARACTER" value="false" />
|
||||||
|
<option name="SMART_TABS" value="false" />
|
||||||
|
<option name="LABEL_INDENT_SIZE" value="0" />
|
||||||
|
<option name="LABEL_INDENT_ABSOLUTE" value="false" />
|
||||||
|
<option name="USE_RELATIVE_INDENTS" value="false" />
|
||||||
|
</ADDITIONAL_INDENT_OPTIONS>
|
||||||
|
<ADDITIONAL_INDENT_OPTIONS fileType="xml">
|
||||||
|
<option name="INDENT_SIZE" value="4" />
|
||||||
|
<option name="CONTINUATION_INDENT_SIZE" value="8" />
|
||||||
|
<option name="TAB_SIZE" value="4" />
|
||||||
|
<option name="USE_TAB_CHARACTER" value="false" />
|
||||||
|
<option name="SMART_TABS" value="false" />
|
||||||
|
<option name="LABEL_INDENT_SIZE" value="0" />
|
||||||
|
<option name="LABEL_INDENT_ABSOLUTE" value="false" />
|
||||||
|
<option name="USE_RELATIVE_INDENTS" value="false" />
|
||||||
|
</ADDITIONAL_INDENT_OPTIONS>
|
||||||
|
<ADDITIONAL_INDENT_OPTIONS fileType="yml">
|
||||||
|
<option name="INDENT_SIZE" value="2" />
|
||||||
|
<option name="CONTINUATION_INDENT_SIZE" value="8" />
|
||||||
|
<option name="TAB_SIZE" value="4" />
|
||||||
|
<option name="USE_TAB_CHARACTER" value="false" />
|
||||||
|
<option name="SMART_TABS" value="false" />
|
||||||
|
<option name="LABEL_INDENT_SIZE" value="0" />
|
||||||
|
<option name="LABEL_INDENT_ABSOLUTE" value="false" />
|
||||||
|
<option name="USE_RELATIVE_INDENTS" value="false" />
|
||||||
|
</ADDITIONAL_INDENT_OPTIONS>
|
||||||
|
</value>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
7
src/messenger/.idea/vcs.xml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="$PROJECT_DIR$/../.." vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
|
|
27
src/messenger/.project
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<projectDescription>
|
||||||
|
<name>messenger</name>
|
||||||
|
<comment></comment>
|
||||||
|
<projects>
|
||||||
|
</projects>
|
||||||
|
<buildSpec>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.dltk.core.scriptbuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.php.core.PhpIncrementalProjectBuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.wst.validation.validationbuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
</buildSpec>
|
||||||
|
<natures>
|
||||||
|
<nature>org.eclipse.php.core.PHPNature</nature>
|
||||||
|
</natures>
|
||||||
|
</projectDescription>
|
9
src/messenger/.settings/org.eclipse.core.resources.prefs
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#Sat May 08 00:52:18 CEST 2010
|
||||||
|
eclipse.preferences.version=1
|
||||||
|
encoding//webim/locales=UTF-8
|
||||||
|
encoding//webim/locales/bg/properties=cp1251
|
||||||
|
encoding//webim/locales/ca/properties=ISO-8859-1
|
||||||
|
encoding//webim/locales/names/properties=utf-8
|
||||||
|
encoding//webim/locales/ru=cp1251
|
||||||
|
encoding//webim/locales/sp/properties=ISO-8859-1
|
||||||
|
encoding//webim/locales/ua/properties=cp1251
|
56
src/messenger/check_translation.pl
Executable file
@ -0,0 +1,56 @@
|
|||||||
|
#!/usr/bin/perl
|
||||||
|
|
||||||
|
sub read_transl($) {
|
||||||
|
my($from) = @_;
|
||||||
|
my %translation = ();
|
||||||
|
open(IN, "webim/locales/$from/properties");
|
||||||
|
while(<IN>) {
|
||||||
|
chomp;
|
||||||
|
if(/^([\w\.]+)=(.*)$/) {
|
||||||
|
if($1 ne "encoding" && $1 ne "output_charset" && $1 ne "output_encoding") {
|
||||||
|
$translation{$1} = $2;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
die "wrong line in $from: $_\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
close(IN);
|
||||||
|
return %translation;
|
||||||
|
}
|
||||||
|
|
||||||
|
%tr_en = read_transl("en");
|
||||||
|
|
||||||
|
@all_keys = keys %tr_en;
|
||||||
|
|
||||||
|
sub check_transl($%) {
|
||||||
|
my($name,%tr) = @_;
|
||||||
|
print "checking $name...\n";
|
||||||
|
my @totransl = ();
|
||||||
|
for $key (@all_keys) {
|
||||||
|
unless(exists $tr{$key}) {
|
||||||
|
push @totransl, "$key=".$tr_en{$key};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for $key(keys %tr) {
|
||||||
|
unless(exists $tr_en{$key}) {
|
||||||
|
print "unknown key in $name: $key\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if($#totransl >= 0) {
|
||||||
|
print "@{[$#totransl+1]} lines absent in locales/$name/properties\n";
|
||||||
|
open(OUT, "> absent_$name");
|
||||||
|
for(sort @totransl) {
|
||||||
|
print OUT "$_\n";
|
||||||
|
}
|
||||||
|
close(OUT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
check_transl("ru", read_transl("ru"));
|
||||||
|
check_transl("fr", read_transl("fr"));
|
||||||
|
check_transl("de", read_transl("de"));
|
||||||
|
check_transl("sp", read_transl("sp"));
|
||||||
|
check_transl("it", read_transl("it"));
|
||||||
|
check_transl("pl", read_transl("pl"));
|
||||||
|
check_transl("zh-tw", read_transl("zh-tw"));
|
||||||
|
|
5
src/messenger/compile_js
Executable file
@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
cd webim/js/source
|
||||||
|
ant
|
||||||
|
rm -rf bin
|
245
src/messenger/compute_resources.pl
Executable file
@ -0,0 +1,245 @@
|
|||||||
|
#!/usr/bin/perl
|
||||||
|
|
||||||
|
use Digest::MD5 qw(md5 md5_hex md5_base64);
|
||||||
|
|
||||||
|
@rules = (
|
||||||
|
["redirect(ed)?\\.tpl", 1],
|
||||||
|
["\\.tpl", 0],
|
||||||
|
|
||||||
|
["view/license.php", 0],
|
||||||
|
["view/themes.php", 2],
|
||||||
|
["view/translate.php", 2],
|
||||||
|
["view/translatelist.php", 2],
|
||||||
|
["view/settings.php", 2],
|
||||||
|
["view/updates.php", 2],
|
||||||
|
["view/features.php", 2],
|
||||||
|
["view/performance.php", 2],
|
||||||
|
["view/avatar.php", 2],
|
||||||
|
["view/permissions.php", 2],
|
||||||
|
["view/agent.php", 2],
|
||||||
|
["view/agents.php", 2],
|
||||||
|
["view/group.php", 2],
|
||||||
|
["view/groupmembers.php", 2],
|
||||||
|
["view/groups.php", 2],
|
||||||
|
["view/operator_groups.php", 2],
|
||||||
|
["view/gen_button.php", 2],
|
||||||
|
["view/install_err.php", 2],
|
||||||
|
["view/install_index.php", 2],
|
||||||
|
["view/.*\\.php", 1],
|
||||||
|
|
||||||
|
["install/.*\\.php", 2],
|
||||||
|
|
||||||
|
["operator/themes.php", 2],
|
||||||
|
["operator/translate.php", 2],
|
||||||
|
["operator/settings.php", 2],
|
||||||
|
["operator/updates.php", 2],
|
||||||
|
["operator/features.php", 2],
|
||||||
|
["operator/performance.php", 2],
|
||||||
|
["operator/avatar.php", 2],
|
||||||
|
["operator/permissions.php", 2],
|
||||||
|
["operator/operator.php", 2],
|
||||||
|
["operator/operators.php", 2],
|
||||||
|
["operator/group.php", 2],
|
||||||
|
["operator/groupmembers.php", 2],
|
||||||
|
["operator/groups.php", 2],
|
||||||
|
["operator/opgroups.php", 2],
|
||||||
|
["operator/getcode.php", 2],
|
||||||
|
["operator/.*\\.php", 1],
|
||||||
|
|
||||||
|
["webim/client.php", 0],
|
||||||
|
["webim/leavemessage.php", 0],
|
||||||
|
["webim/captcha.php", 0],
|
||||||
|
["webim/license.php", 0],
|
||||||
|
["webim/mail.php", 0],
|
||||||
|
|
||||||
|
["libs/operator_settings.php", 2],
|
||||||
|
["webim/libs/chat.php", 0],
|
||||||
|
["libs/pagination.php", 1],
|
||||||
|
["libs/settings.php", 2],
|
||||||
|
["libs/groups.php", 2],
|
||||||
|
["libs/demothread.php", 2],
|
||||||
|
|
||||||
|
["webim/thread.php", 0],
|
||||||
|
["webim/b.php", 0],
|
||||||
|
["webim/button.php", 0],
|
||||||
|
["webim/index.php", 0],
|
||||||
|
|
||||||
|
["webim/libs/.*\\.php", 1],
|
||||||
|
);
|
||||||
|
|
||||||
|
%messagekeys = (
|
||||||
|
"localeid" => 0,
|
||||||
|
"output_charset" => 0,
|
||||||
|
"output_encoding" => 0,
|
||||||
|
"harderrors.header" => 0,
|
||||||
|
|
||||||
|
"errors.required" => 0,
|
||||||
|
"errors.wrong_field" => 0,
|
||||||
|
"errors.file.move.error" => 2,
|
||||||
|
"errors.invalid.file.type" => 2,
|
||||||
|
"errors.file.size.exceeded" => 2,
|
||||||
|
|
||||||
|
"permission.admin" => 1,
|
||||||
|
"permission.takeover" => 1,
|
||||||
|
"permission.viewthreads" => 1,
|
||||||
|
|
||||||
|
"chat.thread.state_chatting_with_agent" => 1,
|
||||||
|
"chat.thread.state_closed" => 1,
|
||||||
|
"chat.thread.state_loading" => 1,
|
||||||
|
"chat.thread.state_wait" => 1,
|
||||||
|
"chat.thread.state_wait_for_another_agent" => 1,
|
||||||
|
|
||||||
|
"clients.queue.chat" => 1,
|
||||||
|
"clients.queue.prio" => 1,
|
||||||
|
"clients.queue.wait" => 1,
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
$webimPath = "webim";
|
||||||
|
|
||||||
|
%urls = ();
|
||||||
|
|
||||||
|
%usermessages = ();
|
||||||
|
%operatormessages = ();
|
||||||
|
$current_level = 0;
|
||||||
|
|
||||||
|
sub usemsg($) {
|
||||||
|
my ($m) = @_;
|
||||||
|
$messagekeys{$m} = exists $messagekeys{$m} && $messagekeys{$m} < $current_level ? $messagekeys{$m} : $current_level;
|
||||||
|
if($current_level == -1) {
|
||||||
|
print " .. $m\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub file_content($) {
|
||||||
|
my $input = $_[0];
|
||||||
|
open( IN1, "< $input" ) or die "cannot find file $input";
|
||||||
|
my $oldslash = $/;
|
||||||
|
$/ = EOI;
|
||||||
|
$content = <IN1>;
|
||||||
|
close( IN1 );
|
||||||
|
if($content =~ s/\r//g) {
|
||||||
|
open( OUT1, "> $input") or die "cannot fix $input";
|
||||||
|
print OUT1 $content;
|
||||||
|
close(OUT1);
|
||||||
|
}
|
||||||
|
$/ = $oldslash;
|
||||||
|
return $content;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub process_tpl($) {
|
||||||
|
my ($filename) = @_;
|
||||||
|
my $m = file_content($filename);
|
||||||
|
while( $m =~ /\${msg:([\w\.]+)(,[\w\.]+)?}/g ) {
|
||||||
|
usemsg($1);
|
||||||
|
}
|
||||||
|
while( $m =~ /\${url:([\w\.]+)(,[\w\.]+)?}/g ) {
|
||||||
|
usemsg($1);
|
||||||
|
$urls{"%$1"} = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub process_php($) {
|
||||||
|
my ($source) = @_;
|
||||||
|
my $content = file_content($source);
|
||||||
|
$content =~ s/<\?xml version=\\"1\.0\\" encoding=\\"UTF-8\\"\?>//;
|
||||||
|
|
||||||
|
while( $content =~ s/<\?(?!xml)(.*?)\?>//s ) {
|
||||||
|
my $inner = $1;
|
||||||
|
while($inner =~ s/(getlocal|getstring|no_field)2?_?\((.*?)[,\)]//s) {
|
||||||
|
my $firstarg = $2;
|
||||||
|
if( $firstarg =~ /^["']([\w\.]+)['"]$/) {
|
||||||
|
usemsg($1);
|
||||||
|
} elsif($firstarg =~ /^\$\w+$/ || $firstarg eq '"$var.header"' || $firstarg eq '"permission.$permid"' || $firstarg eq '$threadstate_key[$thread[\'istate\']]') {
|
||||||
|
# skip
|
||||||
|
} else {
|
||||||
|
print "> unknown: $firstarg\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub file_checksum($) {
|
||||||
|
my ($source) = @_;
|
||||||
|
if($source =~ /\.(png|gif|jpg|ico|wav)$/ || $source =~ /config\.php$/) {
|
||||||
|
return "-";
|
||||||
|
}
|
||||||
|
|
||||||
|
my $content = file_content($source);
|
||||||
|
return md5_hex($content);
|
||||||
|
}
|
||||||
|
|
||||||
|
@allsources = ();
|
||||||
|
|
||||||
|
sub process_one($) {
|
||||||
|
my($source) = @_;
|
||||||
|
push @allsources, $source unless $source =~ /$webimPath\/locales/ && $source !~ /$webimPath\/locales\/(en|names)/ || $source =~ /\/package$/;
|
||||||
|
|
||||||
|
if($source !~ /\.(php|tpl)$/) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$current_level = -1;
|
||||||
|
|
||||||
|
A: foreach $rule (@rules) {
|
||||||
|
my $key = $$rule[0];
|
||||||
|
if($source =~ /$key/) {
|
||||||
|
$current_level = $$rule[1];
|
||||||
|
last A;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if($current_level < 0 || $current_level > 2) {
|
||||||
|
print "not detected for: $source\n";
|
||||||
|
$current_level = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if($source =~ /\.php$/) {
|
||||||
|
# print "$source ($current_level)\n";
|
||||||
|
process_php($source);
|
||||||
|
} elsif($source =~ /\.tpl$/) {
|
||||||
|
process_tpl($source);
|
||||||
|
} else {
|
||||||
|
#print ". $source\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub process_files($) {
|
||||||
|
my($from) = @_;
|
||||||
|
opendir(DIR, $from) || die "can't opendir $from: $!";
|
||||||
|
my @content = readdir(DIR);
|
||||||
|
closedir DIR;
|
||||||
|
|
||||||
|
for(grep { -f "$from/$_" && ($_ !~ /^\./ || $_ eq ".htaccess") } @content) {
|
||||||
|
process_one("$from/$_");
|
||||||
|
}
|
||||||
|
for(grep { -d "$from/$_" && $_ !~ /^\./ } @content) {
|
||||||
|
process_files("$from/$_");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
process_files($webimPath);
|
||||||
|
|
||||||
|
# fix
|
||||||
|
$messagekeys{'page.analysis.userhistory.title'} = 1;
|
||||||
|
$messagekeys{'errors.failed.uploading.file'} = 2;
|
||||||
|
|
||||||
|
|
||||||
|
open( OUT, "> $webimPath/locales/names/level1") or die "cannot write file, $!";
|
||||||
|
for $key(sort grep { $messagekeys{$_} == 0 } keys %messagekeys) {
|
||||||
|
print OUT "$key\n";
|
||||||
|
}
|
||||||
|
close( OUT );
|
||||||
|
|
||||||
|
open( OUT, "> $webimPath/locales/names/level2") or die "cannot write file, $!";
|
||||||
|
for $key(sort grep { $messagekeys{$_} == 1 } keys %messagekeys) {
|
||||||
|
print OUT "$key\n";
|
||||||
|
}
|
||||||
|
close( OUT );
|
||||||
|
|
||||||
|
open( OUT, "> $webimPath/install/package") or die "cannot write file, $!";
|
||||||
|
for $key(sort @allsources) {
|
||||||
|
$digest = file_checksum($key);
|
||||||
|
$key =~ s/$webimPath\///;
|
||||||
|
print OUT "$key $digest\n";
|
||||||
|
}
|
||||||
|
close( OUT );
|
143
src/messenger/pack.pl
Executable file
@ -0,0 +1,143 @@
|
|||||||
|
#!/usr/bin/perl
|
||||||
|
|
||||||
|
##################################################################
|
||||||
|
# Arguments
|
||||||
|
##################################################################
|
||||||
|
|
||||||
|
$targetFolder = "deploy";
|
||||||
|
$suffix = "164";
|
||||||
|
|
||||||
|
##################################################################
|
||||||
|
# Copies tree into target folder, preprocess .phps
|
||||||
|
##################################################################
|
||||||
|
|
||||||
|
sub process_dir($$) {
|
||||||
|
my ($from,$to) = @_;
|
||||||
|
opendir(DIR, $from) || die "can't opendir $from: $!";
|
||||||
|
my @content = readdir(DIR);
|
||||||
|
closedir DIR;
|
||||||
|
mkdir $to;
|
||||||
|
|
||||||
|
for(grep { -f "$from/$_" && ($_ !~ /^\./ || $_ eq ".htaccess" || $_ eq ".keep") } @content) {
|
||||||
|
my ($source,$target) = ("$from/$_","$to/$_");
|
||||||
|
|
||||||
|
open (IN,"$source");
|
||||||
|
binmode(IN);
|
||||||
|
open (OUT,">$target");
|
||||||
|
binmode(OUT);
|
||||||
|
print OUT $buffer while (read (IN,$buffer,65536));
|
||||||
|
}
|
||||||
|
|
||||||
|
for(grep { -d "$from/$_" && $_ !~ /^\./ } @content) {
|
||||||
|
process_dir("$from/$_","$to/$_");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
##################################################################
|
||||||
|
# Main
|
||||||
|
##################################################################
|
||||||
|
|
||||||
|
`rm -rf $targetFolder`;
|
||||||
|
die "Target folder exists: $targetFolder" if -e $targetFolder;
|
||||||
|
|
||||||
|
process_dir("./webim", $targetFolder);
|
||||||
|
|
||||||
|
`rm -rf release$suffix`;
|
||||||
|
die "release folder exists: release$suffix" if -e "release$suffix";
|
||||||
|
mkdir "release$suffix";
|
||||||
|
|
||||||
|
chdir "$targetFolder";
|
||||||
|
|
||||||
|
`zip -r ../release$suffix/mibew${suffix}_all.zip * .htaccess`;
|
||||||
|
|
||||||
|
chdir "locales";
|
||||||
|
|
||||||
|
`zip -r ../../release$suffix/mibew${suffix}_cs.zip cs`;
|
||||||
|
`rm -rf cs`;
|
||||||
|
|
||||||
|
`zip -r ../../release$suffix/mibew${suffix}_fi.zip fi`;
|
||||||
|
`rm -rf fi`;
|
||||||
|
|
||||||
|
`zip -r ../../release$suffix/mibew${suffix}_da.zip da`;
|
||||||
|
`rm -rf da`;
|
||||||
|
|
||||||
|
`zip -r ../../release$suffix/mibew${suffix}_el.zip el`;
|
||||||
|
`rm -rf el`;
|
||||||
|
|
||||||
|
`zip -r ../../release$suffix/mibew${suffix}_lv.zip lv`;
|
||||||
|
`rm -rf lv`;
|
||||||
|
|
||||||
|
`zip -r ../../release$suffix/mibew${suffix}_fa.zip fa`;
|
||||||
|
`rm -rf fa`;
|
||||||
|
|
||||||
|
`zip -r ../../release$suffix/mibew${suffix}_nl.zip nl`;
|
||||||
|
`rm -rf nl`;
|
||||||
|
|
||||||
|
`zip -r ../../release$suffix/mibew${suffix}_th.zip th`;
|
||||||
|
`rm -rf th`;
|
||||||
|
|
||||||
|
`zip -r ../../release$suffix/mibew${suffix}_ar.zip ar`;
|
||||||
|
`rm -rf ar`;
|
||||||
|
|
||||||
|
`zip -r ../../release$suffix/mibew${suffix}_bg.zip bg`;
|
||||||
|
`rm -rf bg`;
|
||||||
|
|
||||||
|
`zip -r ../../release$suffix/mibew${suffix}_ca.zip ca`;
|
||||||
|
`rm -rf ca`;
|
||||||
|
|
||||||
|
`zip -r ../../release$suffix/mibew${suffix}_de.zip de`;
|
||||||
|
`rm -rf de`;
|
||||||
|
|
||||||
|
`zip -r ../../release$suffix/mibew${suffix}_ru.zip ru`;
|
||||||
|
`rm -rf ru`;
|
||||||
|
|
||||||
|
`zip -r ../../release$suffix/mibew${suffix}_ro.zip ro`;
|
||||||
|
`rm -rf ro`;
|
||||||
|
|
||||||
|
`zip -r ../../release$suffix/mibew${suffix}_hu.zip hu`;
|
||||||
|
`rm -rf hu`;
|
||||||
|
|
||||||
|
`zip -r ../../release$suffix/mibew${suffix}_fr.zip fr`;
|
||||||
|
`rm -rf fr`;
|
||||||
|
|
||||||
|
`zip -r ../../release$suffix/mibew${suffix}_it.zip it`;
|
||||||
|
`rm -rf it`;
|
||||||
|
|
||||||
|
`zip -r ../../release$suffix/mibew${suffix}_ka.zip ka`;
|
||||||
|
`rm -rf ka`;
|
||||||
|
|
||||||
|
`zip -r ../../release$suffix/mibew${suffix}_pl.zip pl`;
|
||||||
|
`rm -rf pl`;
|
||||||
|
|
||||||
|
`zip -r ../../release$suffix/mibew${suffix}_pt-br.zip pt-br`;
|
||||||
|
`rm -rf pt-br`;
|
||||||
|
|
||||||
|
`zip -r ../../release$suffix/mibew${suffix}_sp.zip sp`;
|
||||||
|
`rm -rf sp`;
|
||||||
|
|
||||||
|
`zip -r ../../release$suffix/mibew${suffix}_sv.zip sv`;
|
||||||
|
`rm -rf sv`;
|
||||||
|
|
||||||
|
`zip -r ../../release$suffix/mibew${suffix}_ua.zip ua`;
|
||||||
|
`rm -rf ua`;
|
||||||
|
|
||||||
|
`zip -r ../../release$suffix/mibew${suffix}_he.zip he`;
|
||||||
|
`rm -rf he`;
|
||||||
|
|
||||||
|
`zip -r ../../release$suffix/mibew${suffix}_hr.zip hr`;
|
||||||
|
`rm -rf hr`;
|
||||||
|
|
||||||
|
`zip -r ../../release$suffix/mibew${suffix}_tr.zip tr`;
|
||||||
|
`rm -rf tr`;
|
||||||
|
|
||||||
|
`zip -r ../../release$suffix/mibew${suffix}_zh-cn.zip zh-cn`;
|
||||||
|
`rm -rf zh-cn`;
|
||||||
|
|
||||||
|
`zip -r ../../release$suffix/mibew${suffix}_zh-tw.zip zh-tw`;
|
||||||
|
`rm -rf zh-tw`;
|
||||||
|
|
||||||
|
chdir "..";
|
||||||
|
`zip -r ../release$suffix/mibew$suffix.zip * .htaccess`;
|
||||||
|
|
||||||
|
chdir "..";
|
||||||
|
`rm -rf $targetFolder`;
|
14
src/messenger/tools/header.txt
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
This file is part of Mibew Messenger project.
|
||||||
|
|
||||||
|
Copyright (c) 2005-2011 Mibew Messenger Community
|
||||||
|
All rights reserved. The contents of this file are subject to the terms of
|
||||||
|
the Eclipse Public License v1.0 which accompanies this distribution, and
|
||||||
|
is available at http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
|
||||||
|
Alternatively, the contents of this file may be used under the terms of
|
||||||
|
the GNU General Public License Version 2 or later (the "GPL"), in which case
|
||||||
|
the provisions of the GPL are applicable instead of those above. If you wish
|
||||||
|
to allow use of your version of this file only under the terms of the GPL, and
|
||||||
|
not to allow others to use your version of this file under the terms of the
|
||||||
|
EPL, indicate your decision by deleting the provisions above and replace them
|
||||||
|
with the notice and other provisions required by the GPL.
|
63
src/messenger/tools/header_update.pl
Executable file
@ -0,0 +1,63 @@
|
|||||||
|
#!/usr/bin/perl
|
||||||
|
|
||||||
|
$sourceFolder = "../webim";
|
||||||
|
|
||||||
|
sub file_content($) {
|
||||||
|
my $input = $_[0];
|
||||||
|
open( IN1, "< $input" ) or die "cannot find file $input";
|
||||||
|
$/ = EOI;
|
||||||
|
$content = <IN1>;
|
||||||
|
$content =~ s/\r//g;
|
||||||
|
close( IN1 );
|
||||||
|
return $content;
|
||||||
|
}
|
||||||
|
|
||||||
|
$php_header = file_content("header.txt");
|
||||||
|
$php_header =~ s/\s+$//;
|
||||||
|
|
||||||
|
@allfiles = ();
|
||||||
|
|
||||||
|
sub process_folder($) {
|
||||||
|
my($from) = @_;
|
||||||
|
|
||||||
|
opendir(DIR, $from) || die "can't opendir $from: $!";
|
||||||
|
my @content = readdir(DIR);
|
||||||
|
closedir DIR;
|
||||||
|
|
||||||
|
for(grep { -f "$from/$_" && ($_ !~ /^\./ || $_ eq ".htaccess") } @content) {
|
||||||
|
push @allfiles, "$from/$_";
|
||||||
|
}
|
||||||
|
for(grep { -d "$from/$_" && $_ !~ /^\./ } @content) {
|
||||||
|
process_folder("$from/$_");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
process_folder($sourceFolder);
|
||||||
|
|
||||||
|
P: for $phpfile (grep { /\.php$/ } @allfiles) {
|
||||||
|
$content = file_content($phpfile);
|
||||||
|
$content =~ s/\s+$//g;
|
||||||
|
die "not a php: $phpfile" unless $content =~ /^<\?php\n(\/\*.*?\*\/)?/s;
|
||||||
|
die "no comment in $phpfile" unless defined($1);
|
||||||
|
$comment = $1;
|
||||||
|
if($comment =~ /\[external\]/) {
|
||||||
|
next P;
|
||||||
|
};
|
||||||
|
die "no contributors in $phpfile" unless $comment =~ /Contributors:/;
|
||||||
|
$newcomment = $comment;
|
||||||
|
$newcomment =~ s/\s\*\s//g;
|
||||||
|
$newcomment =~ s/^\/\*//;
|
||||||
|
$newcomment =~ s/\*\/$//;
|
||||||
|
$newcomment =~ s/.*(Contributors:)/$1/s;
|
||||||
|
$newcomment =~ s/^\s+//;
|
||||||
|
$newcomment =~ s/\s+$//;
|
||||||
|
$newcomment = "$php_header\n\n$newcomment";
|
||||||
|
$newcomment =~ s/^/ * /gm;
|
||||||
|
$newcomment = "/*\n$newcomment\n */";
|
||||||
|
|
||||||
|
$content =~ s/^(<\?php\n)\/\*.*?\*\//$1$newcomment/s;
|
||||||
|
|
||||||
|
open( OUT, "> $phpfile" ) or die "cannot write file: $phpfile\n";
|
||||||
|
print OUT $content;
|
||||||
|
close( OUT );
|
||||||
|
}
|
33
src/messenger/tools/sortit.pl
Executable file
@ -0,0 +1,33 @@
|
|||||||
|
#!/usr/bin/perl
|
||||||
|
|
||||||
|
sub sort_transl($) {
|
||||||
|
my($from) = @_;
|
||||||
|
my @translation = ();
|
||||||
|
my $header = "";
|
||||||
|
open(IN, "$from");
|
||||||
|
while(<IN>) {
|
||||||
|
chomp;
|
||||||
|
my $curr = $_;
|
||||||
|
if(/^([\w\.]+)=(.*)$/) {
|
||||||
|
if($1 ne "encoding" && $1 ne "output_charset" && $1 ne "output_encoding") {
|
||||||
|
push @translation, $curr;
|
||||||
|
} else {
|
||||||
|
$header .= "$curr\n";
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
die "wrong line in $from: $curr\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
close(IN);
|
||||||
|
open(OUT, "> $from");
|
||||||
|
print OUT $header;
|
||||||
|
for$line(sort @translation) {
|
||||||
|
print OUT "$line\n";
|
||||||
|
}
|
||||||
|
close(OUT);
|
||||||
|
}
|
||||||
|
|
||||||
|
die "no parameter\n" if $#ARGV < 0;
|
||||||
|
die "doesn't exists\n" unless -e $ARGV[0];
|
||||||
|
|
||||||
|
sort_transl($ARGV[0]);
|
4
src/messenger/webim/.htaccess
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<IfModule mod_security.c>
|
||||||
|
SecFilterEngine Off
|
||||||
|
SecFilterScanPOST Off
|
||||||
|
</IfModule>
|
19
src/messenger/webim/COPYING
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
Mibew Messenger
|
||||||
|
Copyright (c) 2005-2011 Mibew Messenger Community
|
||||||
|
|
||||||
|
LICENSE
|
||||||
|
|
||||||
|
Mibew Messenger is distributed under the terms of the Eclipse Public License (or
|
||||||
|
the General Public License, this means that you can choose one of two, and use it
|
||||||
|
accordingly) with the following special exception.
|
||||||
|
|
||||||
|
License exception:
|
||||||
|
No one may remove, alter or hide any copyright notices or links to the community
|
||||||
|
site ("http://mibew.org") contained within the Program. Any derivative work
|
||||||
|
must include this license exception.
|
||||||
|
|
||||||
|
Eclipse Public License:
|
||||||
|
http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
|
||||||
|
General Public License:
|
||||||
|
http://www.gnu.org/copyleft/gpl.html
|
41
src/messenger/webim/README
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
Mibew Messenger
|
||||||
|
Copyright (c) 2005-2011 Mibew Messenger Community
|
||||||
|
|
||||||
|
REQUIREMENTS
|
||||||
|
|
||||||
|
* Apache web server 1.3.34 or above
|
||||||
|
* MySQL database 5.0 or above
|
||||||
|
* PHP 4.x or above with MySQL support
|
||||||
|
|
||||||
|
INSTALLATION
|
||||||
|
|
||||||
|
1. Create folder with name 'webim' in the root of your website.
|
||||||
|
2. Upload all the files contained in this archive (retaining the directory structure) into created folder.
|
||||||
|
Be sure to chromo the webim folder to 755 and the install folder to 644.
|
||||||
|
3. Add a MySQL database with the name 'webim'
|
||||||
|
4. Edit /webim/libs/config.php to the information needed to connect to the database
|
||||||
|
5. Using your web browser visit http://<yourdomain>/webim/install/ and
|
||||||
|
hit 'Create tables'
|
||||||
|
6. Remove /webim/install/ directory from your server
|
||||||
|
7. Logon as
|
||||||
|
user: admin
|
||||||
|
password: <empty>
|
||||||
|
7. Get button code and setup it on your site.
|
||||||
|
8. Change your password and name.
|
||||||
|
9. Wait for your visitors on 'Pending users' page.
|
||||||
|
|
||||||
|
On unix/linux platforms change the owner of /webim/images/avatar folder
|
||||||
|
to the user, under which the web server is running (for instance, www).
|
||||||
|
The owner should have all rights on the folder /webim/images/avatar
|
||||||
|
(chmod 700 /webim/images/avatar).
|
||||||
|
|
||||||
|
UPDATE
|
||||||
|
|
||||||
|
1. Backup your /webim/libs/config.php
|
||||||
|
2. Backup your /webim/images/avatar folder.
|
||||||
|
3. Delete the items in the webim folder on the server.
|
||||||
|
4. Upload all the files contained in the downloaded archive (retaining the directory structure) into webim folder.
|
||||||
|
5. Re-edit the MySQL database settings you config.php
|
||||||
|
6. Visit http://<yourdomain>/webim/install/ and follow the instructions to update database (if needed).
|
||||||
|
7. Remove /webim/install/ directory from your server
|
||||||
|
8. Restore contents of /webim/images/avatar folder.
|
1
src/messenger/webim/VERSION
Normal file
@ -0,0 +1 @@
|
|||||||
|
Mibew/1.6.4
|
76
src/messenger/webim/b.php
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* This file is part of Mibew Messenger project.
|
||||||
|
*
|
||||||
|
* Copyright (c) 2005-2011 Mibew Messenger Community
|
||||||
|
* All rights reserved. The contents of this file are subject to the terms of
|
||||||
|
* the Eclipse Public License v1.0 which accompanies this distribution, and
|
||||||
|
* is available at http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* the GNU General Public License Version 2 or later (the "GPL"), in which case
|
||||||
|
* the provisions of the GPL are applicable instead of those above. If you wish
|
||||||
|
* to allow use of your version of this file only under the terms of the GPL, and
|
||||||
|
* not to allow others to use your version of this file under the terms of the
|
||||||
|
* EPL, indicate your decision by deleting the provisions above and replace them
|
||||||
|
* with the notice and other provisions required by the GPL.
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* Evgeny Gryaznov - initial API and implementation
|
||||||
|
*/
|
||||||
|
|
||||||
|
require_once('libs/common.php');
|
||||||
|
require_once('libs/chat.php');
|
||||||
|
require_once('libs/operator.php');
|
||||||
|
require_once('libs/groups.php');
|
||||||
|
|
||||||
|
$referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : "";
|
||||||
|
if($referer && isset($_SESSION['threadid'])) {
|
||||||
|
$link = connect();
|
||||||
|
$thread = thread_by_id_($_SESSION['threadid'], $link);
|
||||||
|
if ($thread && $thread['istate'] != $state_closed) {
|
||||||
|
$msg = getstring2_("chat.client.visited.page", array($referer), $thread['locale']);
|
||||||
|
post_message_($thread['threadid'], $kind_for_agent,$msg,$link);
|
||||||
|
}
|
||||||
|
mysql_close($link);
|
||||||
|
}
|
||||||
|
|
||||||
|
$image = verifyparam(isset($_GET['image']) ? "image" : "i", "/^\w+$/", "webim");
|
||||||
|
$lang = verifyparam(isset($_GET['language']) ? "language" : "lang", "/^[\w-]{2,5}$/", "");
|
||||||
|
if(!$lang || !locale_exists($lang)) {
|
||||||
|
$lang = $current_locale;
|
||||||
|
}
|
||||||
|
|
||||||
|
$groupid = verifyparam( "group", "/^\d{1,8}$/", "");
|
||||||
|
if($groupid) {
|
||||||
|
loadsettings();
|
||||||
|
if($settings['enablegroups'] == '1') {
|
||||||
|
$group = group_by_id($groupid);
|
||||||
|
if(!$group) {
|
||||||
|
$groupid = "";
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$groupid = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$image_postfix = has_online_operators($groupid) ? "on" : "off";
|
||||||
|
$filename = "locales/${lang}/button/${image}_${image_postfix}.gif";
|
||||||
|
|
||||||
|
$fp = fopen($filename, 'rb') or die("no image");
|
||||||
|
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
|
||||||
|
header("Cache-Control: no-store, no-cache, must-revalidate");
|
||||||
|
header("Pragma: no-cache");
|
||||||
|
header("Content-Type: image/gif");
|
||||||
|
header("Content-Length: ".filesize($filename));
|
||||||
|
if(function_exists('fpassthru')){
|
||||||
|
@fpassthru($fp);
|
||||||
|
} else {
|
||||||
|
while( (!feof($fp)) && (connection_status()==0)){
|
||||||
|
print(fread($fp, 1024*8));
|
||||||
|
flush();
|
||||||
|
}
|
||||||
|
fclose($fp);
|
||||||
|
}
|
||||||
|
exit;
|
||||||
|
?>
|
21
src/messenger/webim/button.php
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* This file is part of Mibew Messenger project.
|
||||||
|
*
|
||||||
|
* Copyright (c) 2005-2011 Mibew Messenger Community
|
||||||
|
* All rights reserved. The contents of this file are subject to the terms of
|
||||||
|
* the Eclipse Public License v1.0 which accompanies this distribution, and
|
||||||
|
* is available at http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* the GNU General Public License Version 2 or later (the "GPL"), in which case
|
||||||
|
* the provisions of the GPL are applicable instead of those above. If you wish
|
||||||
|
* to allow use of your version of this file only under the terms of the GPL, and
|
||||||
|
* not to allow others to use your version of this file under the terms of the
|
||||||
|
* EPL, indicate your decision by deleting the provisions above and replace them
|
||||||
|
* with the notice and other provisions required by the GPL.
|
||||||
|
*/
|
||||||
|
|
||||||
|
require_once('b.php');
|
||||||
|
exit;
|
||||||
|
?>
|
30
src/messenger/webim/captcha.php
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* This file is part of Mibew Messenger project.
|
||||||
|
*
|
||||||
|
* Copyright (c) 2005-2011 Mibew Messenger Community
|
||||||
|
* All rights reserved. The contents of this file are subject to the terms of
|
||||||
|
* the Eclipse Public License v1.0 which accompanies this distribution, and
|
||||||
|
* is available at http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* the GNU General Public License Version 2 or later (the "GPL"), in which case
|
||||||
|
* the provisions of the GPL are applicable instead of those above. If you wish
|
||||||
|
* to allow use of your version of this file only under the terms of the GPL, and
|
||||||
|
* not to allow others to use your version of this file under the terms of the
|
||||||
|
* EPL, indicate your decision by deleting the provisions above and replace them
|
||||||
|
* with the notice and other provisions required by the GPL.
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* Evgeny Gryaznov - initial API and implementation
|
||||||
|
*/
|
||||||
|
|
||||||
|
require_once('libs/common.php');
|
||||||
|
require_once('libs/captcha.php');
|
||||||
|
|
||||||
|
$captchaCode = gen_captcha();
|
||||||
|
$_SESSION["mibew_captcha"] = $captchaCode;
|
||||||
|
draw_captcha($captchaCode);
|
||||||
|
|
||||||
|
exit;
|
||||||
|
?>
|
164
src/messenger/webim/client.php
Normal file
@ -0,0 +1,164 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* This file is part of Mibew Messenger project.
|
||||||
|
*
|
||||||
|
* Copyright (c) 2005-2011 Mibew Messenger Community
|
||||||
|
* All rights reserved. The contents of this file are subject to the terms of
|
||||||
|
* the Eclipse Public License v1.0 which accompanies this distribution, and
|
||||||
|
* is available at http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
|
* the GNU General Public License Version 2 or later (the "GPL"), in which case
|
||||||
|
* the provisions of the GPL are applicable instead of those above. If you wish
|
||||||
|
* to allow use of your version of this file only under the terms of the GPL, and
|
||||||
|
* not to allow others to use your version of this file under the terms of the
|
||||||
|
* EPL, indicate your decision by deleting the provisions above and replace them
|
||||||
|
* with the notice and other provisions required by the GPL.
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* Evgeny Gryaznov - initial API and implementation
|
||||||
|
*/
|
||||||
|
|
||||||
|
require_once('libs/common.php');
|
||||||
|
require_once('libs/chat.php');
|
||||||
|
require_once('libs/operator.php');
|
||||||
|
require_once('libs/groups.php');
|
||||||
|
require_once('libs/expand.php');
|
||||||
|
require_once('libs/captcha.php');
|
||||||
|
|
||||||
|
loadsettings();
|
||||||
|
if($settings['enablessl'] == "1" && $settings['forcessl'] == "1") {
|
||||||
|
if(!is_secure_request()) {
|
||||||
|
$requested = $_SERVER['PHP_SELF'];
|
||||||
|
if($_SERVER['REQUEST_METHOD'] == 'GET' && $_SERVER['QUERY_STRING']) {
|
||||||
|
header("Location: ".get_app_location(true,true)."/client.php?".$_SERVER['QUERY_STRING']);
|
||||||
|
} else {
|
||||||
|
die("only https connections are handled");
|
||||||
|
}
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if( !isset($_GET['token']) || !isset($_GET['thread']) ) {
|
||||||
|
|
||||||
|
$thread = NULL;
|
||||||
|
if( isset($_SESSION['threadid']) ) {
|
||||||
|
$thread = reopen_thread($_SESSION['threadid']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if( !$thread ) {
|
||||||
|
$groupid = "";
|
||||||
|
$groupname = "";
|
||||||
|
if($settings['enablegroups'] == '1') {
|
||||||
|
$groupid = verifyparam( "group", "/^\d{1,8}$/", "");
|
||||||
|
if($groupid) {
|
||||||
|
$group = group_by_id($groupid);
|
||||||
|
if(!$group) {
|
||||||
|
$groupid = "";
|
||||||
|
} else {
|
||||||
|
$groupname = get_group_name($group);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$visitor = visitor_from_request();
|
||||||
|
|
||||||
|
if(isset($_POST['survey']) && $_POST['survey'] == 'on') {
|
||||||
|
$firstmessage = getparam("message");
|
||||||
|
$info = getparam("info");
|
||||||
|
$email = getparam("email");
|
||||||
|
$referrer = urldecode(getparam("referrer"));
|
||||||
|
|
||||||
|
if($settings['usercanchangename'] == "1" && isset($_POST['name'])) {
|
||||||
|
$newname = getparam("name");
|
||||||
|
if($newname != $visitor['name']) {
|
||||||
|
$data = strtr(base64_encode(myiconv($webim_encoding,"utf-8",$newname)), '+/=', '-_,');
|
||||||
|
setcookie($namecookie, $data, time()+60*60*24*365);
|
||||||
|
$visitor['name'] = $newname;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$firstmessage = NULL;
|
||||||
|
$info = getgetparam('info');
|
||||||
|
$email = getgetparam('email');
|
||||||
|
$referrer = isset($_GET['url']) ? $_GET['url'] :
|
||||||
|
(isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : "");
|
||||||
|
if(isset($_GET['referrer']) && $_GET['referrer']) {
|
||||||
|
$referrer .= "\n".$_GET['referrer'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!has_online_operators($groupid)) {
|
||||||
|
$page = array();
|
||||||
|
setup_logo();
|
||||||
|
setup_leavemessage($visitor['name'],$email,$firstmessage,$groupid,$groupname,$info,$referrer,can_show_captcha());
|
||||||
|
expand("styles", getchatstyle(), "leavemessage.tpl");
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
if($settings['enablepresurvey'] == '1' && !(isset($_POST['survey']) && $_POST['survey'] == 'on')) {
|
||||||
|
$page = array();
|
||||||
|
setup_logo();
|
||||||
|
setup_survey($visitor['name'], $email, $groupid, $info, $referrer);
|
||||||
|
expand("styles", getchatstyle(), "survey.tpl");
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
$remoteHost = get_remote_host();
|
||||||
|
$userbrowser = $_SERVER['HTTP_USER_AGENT'];
|
||||||
|
|
||||||
|
$link = connect();
|
||||||
|
if(!check_connections_from_remote($remoteHost, $link)) {
|
||||||
|
mysql_close($link);
|
||||||
|
die("number of connections from your IP is exceeded, try again later");
|
||||||
|
}
|
||||||
|
$thread = create_thread($groupid,$visitor['name'], $remoteHost, $referrer,$current_locale,$visitor['id'], $userbrowser,$state_loading,$link);
|
||||||
|
$_SESSION['threadid'] = $thread['threadid'];
|
||||||
|
|
||||||
|
if( $referrer ) {
|
||||||
|
post_message_($thread['threadid'],$kind_for_agent,getstring2('chat.came.from',array($referrer)),$link);
|
||||||
|
}
|
||||||
|
post_message_($thread['threadid'],$kind_info,getstring('chat.wait'),$link);
|
||||||
|
if($email) {
|
||||||
|
post_message_($thread['threadid'],$kind_for_agent,getstring2('chat.visitor.email',array($email)),$link);
|
||||||
|
}
|
||||||
|
if($info) {
|
||||||
|
post_message_($thread['threadid'],$kind_for_agent,getstring2('chat.visitor.info',array($info)),$link);
|
||||||
|
}
|
||||||
|
if($firstmessage) {
|
||||||
|
$postedid = post_message_($thread['threadid'],$kind_user,$firstmessage,$link,$visitor['name']);
|
||||||
|
commit_thread( $thread['threadid'], array('shownmessageid' => $postedid), $link);
|
||||||
|
}
|
||||||
|
mysql_close($link);
|
||||||
|
}
|
||||||
|
$threadid = $thread['threadid'];
|
||||||
|
$token = $thread['ltoken'];
|
||||||
|
$level = get_remote_level($_SERVER['HTTP_USER_AGENT']);
|
||||||
|
$chatstyle = verifyparam( "style", "/^\w+$/", "");
|
||||||
|
header("Location: $webimroot/client.php?thread=$threadid&token=$token&level=$level".($chatstyle ? "&style=$chatstyle" : ""));
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
$token = verifyparam( "token", "/^\d{1,8}$/");
|
||||||
|
$threadid = verifyparam( "thread", "/^\d{1,8}$/");
|
||||||
|
$level = verifyparam( "level", "/^(ajaxed|simple|old)$/");
|
||||||
|
|
||||||
|
$thread = thread_by_id($threadid);
|
||||||
|
if( !$thread || !isset($thread['ltoken']) || $token != $thread['ltoken'] ) {
|
||||||
|
die("wrong thread");
|
||||||
|
}
|
||||||
|
|
||||||
|
setup_chatview_for_user($thread, $level);
|
||||||
|
|
||||||
|
$pparam = verifyparam( "act", "/^(mailthread)$/", "default");
|
||||||
|
if( $pparam == "mailthread" ) {
|
||||||
|
expand("styles", getchatstyle(), "mail.tpl");
|
||||||
|
} else if( $level == "ajaxed" ) {
|
||||||
|
expand("styles", getchatstyle(), "chat.tpl");
|
||||||
|
} else if( $level == "simple" ) {
|
||||||
|
expand("styles", getchatstyle(), "chatsimple.tpl");
|
||||||
|
} else if( $level == "old" ) {
|
||||||
|
expand("styles", getchatstyle(), "nochat.tpl");
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
901
src/messenger/webim/default.css
Normal file
@ -0,0 +1,901 @@
|
|||||||
|
/*
|
||||||
|
This file is part of Mibew Messenger project.
|
||||||
|
|
||||||
|
Copyright (c) 2005-2011 Mibew Messenger Community
|
||||||
|
All rights reserved. The contents of this file are subject to the terms of
|
||||||
|
the Eclipse Public License v1.0 which accompanies this distribution, and
|
||||||
|
is available at http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
|
||||||
|
Alternatively, the contents of this file may be used under the terms of
|
||||||
|
the GNU General Public License Version 2 or later (the "GPL"), in which case
|
||||||
|
the provisions of the GPL are applicable instead of those above. If you wish
|
||||||
|
to allow use of your version of this file only under the terms of the GPL, and
|
||||||
|
not to allow others to use your version of this file under the terms of the
|
||||||
|
EPL, indicate your decision by deleting the provisions above and replace them
|
||||||
|
with the notice and other provisions required by the GPL.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* reset all */
|
||||||
|
|
||||||
|
html, body, div, h1, h2, h3, h4, h5, h6, ul, ol, dl, li, dt, dd, p, blockquote, pre, form, fieldset, table, th, td { margin: 0; padding: 0; }
|
||||||
|
table { border-collapse:collapse; border-spacing:0; }
|
||||||
|
fieldset,img { border:0; }
|
||||||
|
ol,ul { list-style:none; }
|
||||||
|
h1,h2,h3,h4,h5,h6 { font-size:100%; font-weight:normal; }
|
||||||
|
q:before,q:after { content:''; }
|
||||||
|
|
||||||
|
body {
|
||||||
|
background: #FFFFFF url(images/header.gif) repeat-x;
|
||||||
|
font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
|
||||||
|
font-size: 0.8em;
|
||||||
|
line-height: 140%;
|
||||||
|
color: #333333;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 100% height with footer, 200 px sidebar */
|
||||||
|
|
||||||
|
html, body {
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
min-width: 750px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #2f7599;
|
||||||
|
}
|
||||||
|
|
||||||
|
#wrap400, #wrap700, #fixedwrap {
|
||||||
|
position:relative;
|
||||||
|
margin: 0px auto -41px;
|
||||||
|
height:auto !important;
|
||||||
|
height:100%;
|
||||||
|
min-height:100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#wrap400 {
|
||||||
|
width: 100%;
|
||||||
|
min-width:450px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#wrap700 {
|
||||||
|
width: 100%;
|
||||||
|
min-width:750px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#fixedwrap {
|
||||||
|
width: 750px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contentdiv {
|
||||||
|
float:left;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contentinner {
|
||||||
|
margin-right: 210px;
|
||||||
|
padding: 10px 60px 10px 20px;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contentnomenu {
|
||||||
|
padding: 10px 60px 10px 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.empty_inner {
|
||||||
|
height:40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#footer {
|
||||||
|
background: white url(images/footer.gif) bottom repeat-x;
|
||||||
|
font-size:11px;
|
||||||
|
position:relative;
|
||||||
|
|
||||||
|
min-height: 40px;
|
||||||
|
height:40px;
|
||||||
|
vertical-align:middle;
|
||||||
|
|
||||||
|
width:100%;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
#legal {
|
||||||
|
clear: both;
|
||||||
|
line-height: 30px;
|
||||||
|
padding-top:10px;
|
||||||
|
text-align: center;
|
||||||
|
color: #375C69;
|
||||||
|
margin-bottom: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#footer .flink {
|
||||||
|
color: #2f7599;
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
#togglediv {
|
||||||
|
float:right;
|
||||||
|
padding-right:10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Header */
|
||||||
|
|
||||||
|
#header {
|
||||||
|
width: 100%;
|
||||||
|
height: 32px;
|
||||||
|
margin: 0px -2px 10px 0px;
|
||||||
|
padding-top: 10px;
|
||||||
|
padding-bottom: 5px;
|
||||||
|
background: url(images/graydot.gif) repeat-x left bottom;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
#header {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
img.left {
|
||||||
|
float: left;
|
||||||
|
margin-right: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#header h1 {
|
||||||
|
font-size: 2em;
|
||||||
|
line-height: 32px;
|
||||||
|
color: #494949;
|
||||||
|
margin-left: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#header h1 a {
|
||||||
|
color: #494949;
|
||||||
|
}
|
||||||
|
|
||||||
|
#header a {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#title {
|
||||||
|
float: left;
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
|
||||||
|
#path {
|
||||||
|
float: right;
|
||||||
|
padding: 10px 20px 0px 0px;
|
||||||
|
line-height: 22px;
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Sidebar */
|
||||||
|
|
||||||
|
#sidebar {
|
||||||
|
float: left;
|
||||||
|
width: 185px;
|
||||||
|
margin-left: -210px;
|
||||||
|
margin-top: 20px;
|
||||||
|
position:relative;
|
||||||
|
line-height: 180%
|
||||||
|
}
|
||||||
|
|
||||||
|
#sidebar ul {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
list-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#sidebar li {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#sidebar li ul {
|
||||||
|
}
|
||||||
|
|
||||||
|
#sidebar li li {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#sidebar h2 {
|
||||||
|
text-transform: lowercase;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
background: url(images/graydot.gif) repeat-x left bottom;
|
||||||
|
font-size: 1.3em;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.locales a {
|
||||||
|
color: #2f7599;
|
||||||
|
font-size: 1em;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.locales .active a {
|
||||||
|
color: #555;
|
||||||
|
}
|
||||||
|
|
||||||
|
.locales a:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.submenu a {
|
||||||
|
padding-left: 15px;
|
||||||
|
color: #2f7599;
|
||||||
|
font-size: 1em;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.submenu a.inner { padding-left: 0px; }
|
||||||
|
.submenu span.small { font-size: 80%; padding-left: 5px; }
|
||||||
|
|
||||||
|
.submenu .active a {
|
||||||
|
background: url(images/li.gif) no-repeat left 1px;
|
||||||
|
color: #555;
|
||||||
|
}
|
||||||
|
|
||||||
|
.submenu .active a.inner {
|
||||||
|
background: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.submenu a:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* form, tabbed form */
|
||||||
|
|
||||||
|
.mform {
|
||||||
|
background: url(images/loginbg.gif);
|
||||||
|
clear: both;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tabs {
|
||||||
|
float: right;
|
||||||
|
display: inline;
|
||||||
|
margin-right: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tabs li {
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tabs a {
|
||||||
|
display: block;
|
||||||
|
float: left;
|
||||||
|
padding: 2px 9px 3px 9px;
|
||||||
|
font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
|
||||||
|
font-size: 11px;
|
||||||
|
color: #2f7599;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tabs li.active a {
|
||||||
|
background: url(images/loginbg.gif);
|
||||||
|
border-left:1px solid #bbbbbb;border-top:1px solid #bbbbbb;border-right:1px solid #bbbbbb;
|
||||||
|
color: #000;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.formtop, .formbottom, .formtopi, .formbottomi { height: 15px;}
|
||||||
|
.formtop { background: url(images/logincrnrt.gif) no-repeat top right;}
|
||||||
|
.formtopi { background: url(images/logincrnlt.gif) no-repeat top left; }
|
||||||
|
.formbottom { background: url(images/logincrnrb.gif) no-repeat bottom right; }
|
||||||
|
.formbottomi { background: url(images/logincrnlb.gif) no-repeat bottom left; }
|
||||||
|
.forminner { margin: 0px 15px;}
|
||||||
|
.forminner p { margin-bottom: 1em; }
|
||||||
|
|
||||||
|
/* fieldForm */
|
||||||
|
|
||||||
|
.fieldForm {
|
||||||
|
font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
|
||||||
|
font-size: 11px;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.packedFormField {
|
||||||
|
font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
|
||||||
|
font-size: 11px;
|
||||||
|
float:left;
|
||||||
|
margin-right:25px;
|
||||||
|
margin-bottom:8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.errinfo {
|
||||||
|
color: #c13030;
|
||||||
|
}
|
||||||
|
|
||||||
|
.field {
|
||||||
|
width: 100%;
|
||||||
|
margin-top: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flabel {
|
||||||
|
position: relative;
|
||||||
|
margin: 8px auto 2px;
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fleftlabel {
|
||||||
|
float: left;
|
||||||
|
width: 100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flabel span.required {
|
||||||
|
font-size:8.0pt;
|
||||||
|
color:red;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.field .subfield {
|
||||||
|
padding-left: 30px;
|
||||||
|
background: url(images/subitem.gif) no-repeat 10px 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fieldinrow {
|
||||||
|
min-width: 300px;
|
||||||
|
display: inline;
|
||||||
|
float:left;
|
||||||
|
width: 45%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fvalue {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fvaluewithta {
|
||||||
|
float: left;
|
||||||
|
width: 67%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fvaluewithta textarea {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fvaluenodesc {
|
||||||
|
}
|
||||||
|
|
||||||
|
.fvalueframe {
|
||||||
|
overflow: auto;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fvalueframe iframe {
|
||||||
|
border: solid 1px #999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fdescr {
|
||||||
|
float:left;
|
||||||
|
padding-left:10px;
|
||||||
|
color: #676767;
|
||||||
|
font-size: 10px;
|
||||||
|
min-width: 200px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fbutton {
|
||||||
|
background: url(images/formline.gif) repeat-x;
|
||||||
|
margin-top: 20px;
|
||||||
|
padding-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fbutton .links {
|
||||||
|
float: right;
|
||||||
|
margin-top: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fbutton .submitbutton {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.formauth {
|
||||||
|
}
|
||||||
|
|
||||||
|
textarea.wide {
|
||||||
|
border:1px solid #878787;
|
||||||
|
overflow:auto;
|
||||||
|
width: 95%;
|
||||||
|
}
|
||||||
|
|
||||||
|
input.formauth {
|
||||||
|
border: 1px solid #878787;
|
||||||
|
color: #333;
|
||||||
|
margin-right:15px;
|
||||||
|
padding-right: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#formmessage {
|
||||||
|
border: 1px solid #4C96D4;
|
||||||
|
background-color: #E7F1F9;
|
||||||
|
padding: 8px 11px;
|
||||||
|
font-size: 0.85em;
|
||||||
|
font-weight:bold;
|
||||||
|
max-width: 700px;
|
||||||
|
margin: -10px 2px 10px;
|
||||||
|
color: #515151;
|
||||||
|
}
|
||||||
|
|
||||||
|
#offwarn {
|
||||||
|
border: 1px solid #4CD496;
|
||||||
|
background-color: #E7F9F1;
|
||||||
|
color: #515151;
|
||||||
|
padding: 8px 11px;
|
||||||
|
font-size: 0.85em;
|
||||||
|
font-weight:bold;
|
||||||
|
line-height: 140%;
|
||||||
|
margin: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#offwarn img {
|
||||||
|
margin-top: .4em;
|
||||||
|
float: left;
|
||||||
|
padding-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.asterisk {
|
||||||
|
padding: 10px 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* tables */
|
||||||
|
|
||||||
|
.tabletool {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tabletool a {
|
||||||
|
color: #296685;
|
||||||
|
vertical-align: top;
|
||||||
|
padding-left: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tabletitle {
|
||||||
|
background: url(images/graydot.gif) repeat-x left bottom;
|
||||||
|
font-family: "Lucida Sans Unicode", "Lucida Grande", Sans-Serif;
|
||||||
|
font-size: 1.4em;
|
||||||
|
margin: 10px 0px 20px;
|
||||||
|
padding-bottom: 10px;
|
||||||
|
color: #1D485E;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.list, table.translate, table.statistics {
|
||||||
|
font-family: "Lucida Sans Unicode", "Lucida Grande", Sans-Serif;
|
||||||
|
background: #fff;
|
||||||
|
width: 100%;
|
||||||
|
border-collapse: collapse;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.list th, table.translate th, table.statistics th {
|
||||||
|
font-size: 1.2em;
|
||||||
|
font-weight: normal;
|
||||||
|
padding: 10px 8px;
|
||||||
|
border-bottom: 2px solid #2F7598;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.list th, table.translate th { color: #1D485E; }
|
||||||
|
table.statistics th { color: #2F7598; }
|
||||||
|
|
||||||
|
table.list td, table.statistics td {
|
||||||
|
color: #2f7599;
|
||||||
|
padding: 10px 8px;
|
||||||
|
border-bottom: 1px solid #ccc;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.translate td {
|
||||||
|
font-family: Arial, Helvetica, sans-serif;
|
||||||
|
font-size: 12px;
|
||||||
|
color: #515151;
|
||||||
|
padding: 2px 8px;
|
||||||
|
border-bottom: 1px solid #ccc;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.list td a.man {
|
||||||
|
background: url(images/tbliclogin.gif) no-repeat left center;
|
||||||
|
padding-left: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.list tbody tr:hover td, table.list tbody tr:hover td a, table.statistics tbody tr:hover td {
|
||||||
|
color: #1D485E;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* awaiting */
|
||||||
|
|
||||||
|
table.awaiting {
|
||||||
|
font-family: "Lucida Sans Unicode", "Lucida Grande", Sans-Serif;
|
||||||
|
background: #fff;
|
||||||
|
width: 100%;
|
||||||
|
border-collapse: collapse;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.awaiting th {
|
||||||
|
font-size: 1.2em;
|
||||||
|
font-weight: normal;
|
||||||
|
color: #1D485E;
|
||||||
|
padding: 10px 8px;
|
||||||
|
border-bottom: 2px solid #2F7598;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.awaiting th.first {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.awaiting table.inner {
|
||||||
|
border: none;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.awaiting table.inner .icon {
|
||||||
|
width: 30px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.awaiting td.visitor {
|
||||||
|
color: #296685;
|
||||||
|
border-bottom: 1px solid #ccc;
|
||||||
|
padding: 10px 8px;
|
||||||
|
margin: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.awaiting .visitor a { color: #296685; }
|
||||||
|
.awaiting tr:hover .visitor, .awaiting tr:hover .visitor a { color: #1D485E; }
|
||||||
|
|
||||||
|
.awaiting tr.ban .visitor, .awaiting tr.ban .visitor a { color: #9AC8E0; }
|
||||||
|
.awaiting tr.ban:hover .visitor, .awaiting tr.ban:hover .visitor a { color: #4C9CC8; }
|
||||||
|
|
||||||
|
.awaiting tr.inwait .visitor, .awaiting tr.inwait a { font-weight: bold; }
|
||||||
|
.awaiting tr.inprio .visitor, .awaiting tr.inprio a { font-weight: bold; font-size: 1.05em; }
|
||||||
|
.awaiting tr.inchat .visitor, .awaiting tr.inchat .visitor a { color: #777; }
|
||||||
|
.awaiting tr.inchat:hover .visitor, .awaiting tr.inchat:hover .visitor a { color: #444; }
|
||||||
|
.awaiting tr.inchat a { text-decoration: none; }
|
||||||
|
|
||||||
|
.firstmessage {
|
||||||
|
text-align: right;
|
||||||
|
font-size: 0.8em;
|
||||||
|
padding-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.firstmessage a {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.firstmessage a:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
#connstatus {
|
||||||
|
float:right;
|
||||||
|
margin: 10px 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#connlinks {
|
||||||
|
margin: 10px 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#connlinks a {
|
||||||
|
color: #777;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#connlinks a:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* online operators */
|
||||||
|
|
||||||
|
#onlineoperators {
|
||||||
|
padding-right: 10px;
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* search */
|
||||||
|
|
||||||
|
#searchtext {
|
||||||
|
float:left;
|
||||||
|
display: inline;
|
||||||
|
margin:7px 20px 5px 0px;
|
||||||
|
width:75%;
|
||||||
|
padding-right:5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.searchctrl {
|
||||||
|
float: left;
|
||||||
|
margin:7px 20px 5px 0px;
|
||||||
|
padding-right:5px;
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
|
||||||
|
#searchtext input {
|
||||||
|
width: 100%;
|
||||||
|
margin: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#searchbutton {
|
||||||
|
float:left;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* login */
|
||||||
|
|
||||||
|
#loginsmallpane {
|
||||||
|
float: right;
|
||||||
|
padding: 10px 15px 0px 0px;
|
||||||
|
margin-right: 0px;
|
||||||
|
line-height: 22px;
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
|
||||||
|
#loginsmallpane input {
|
||||||
|
margin: 0px 3px;
|
||||||
|
padding: 0px 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#loginsmallpane .butt {
|
||||||
|
height: 1.3em;
|
||||||
|
border: 0px;
|
||||||
|
background: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#loginsmallpane .butt:hover {
|
||||||
|
background: #aaa;
|
||||||
|
}
|
||||||
|
|
||||||
|
#loginintro {
|
||||||
|
width: 400px;
|
||||||
|
margin: 10px 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#loginpane {
|
||||||
|
width: 400px;
|
||||||
|
margin: 30px 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#loginpane .header h2 {
|
||||||
|
font-size: 2em;
|
||||||
|
margin-bottom: 0.9em;
|
||||||
|
padding-bottom: 0.8em;
|
||||||
|
border-bottom: 2px solid #2F7598;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* nice button */
|
||||||
|
|
||||||
|
#confirmpane {
|
||||||
|
width:450px;
|
||||||
|
margin:0px auto 5px;
|
||||||
|
padding-top: 70px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nicebutton {
|
||||||
|
border: none;
|
||||||
|
float: left;
|
||||||
|
margin-left: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.submit a {
|
||||||
|
font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
|
||||||
|
font-size: 11px;
|
||||||
|
line-height: 35px;
|
||||||
|
color: #000000;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.submit {
|
||||||
|
background: url(images/submitbg.gif) repeat-x;
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* thread log */
|
||||||
|
|
||||||
|
.logpane {
|
||||||
|
margin: 10px 0px;
|
||||||
|
line-height: 150%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.logpane .header {
|
||||||
|
padding-bottom: 0.8em;
|
||||||
|
border-bottom: 2px solid #2F7598;
|
||||||
|
}
|
||||||
|
|
||||||
|
.logpane .wlabel {
|
||||||
|
width: 10em;
|
||||||
|
float: left;
|
||||||
|
margin-right:10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.logpane .wvalue {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* dashboard */
|
||||||
|
|
||||||
|
#dashboard {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dashitem {
|
||||||
|
width:33%;
|
||||||
|
margin: 0px 2em 5em 0px;
|
||||||
|
padding: 5px 2em 5em;
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dashitem:hover {
|
||||||
|
}
|
||||||
|
|
||||||
|
.dashitem a {
|
||||||
|
padding-top:2px;
|
||||||
|
padding-bottom: 10px;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dashitem img, #dashlocalesPopup h2 img {
|
||||||
|
float: left;
|
||||||
|
padding-right:10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#dashlocalesPopup h2 img {
|
||||||
|
margin-top: -3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#dashlocalesPopup .locales {
|
||||||
|
line-height: 180%;
|
||||||
|
margin-left:10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#dashlocalesPopup h2 {
|
||||||
|
font-size: 1.5em;
|
||||||
|
margin-bottom: 0.9em;
|
||||||
|
padding: 5px 30px 0.8em 0px;
|
||||||
|
border-bottom: 2px solid #2F7598;
|
||||||
|
}
|
||||||
|
|
||||||
|
#dashlocalesPopupClose {
|
||||||
|
float: right;
|
||||||
|
position:absolute;
|
||||||
|
right:5px;
|
||||||
|
top:5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#dashlocalesPopup {
|
||||||
|
display:none;
|
||||||
|
position:fixed;
|
||||||
|
_position:absolute; /* ie6*/
|
||||||
|
background:#FFFFFF;
|
||||||
|
border:2px solid #2F7598;
|
||||||
|
z-index:110;
|
||||||
|
padding:1em 1em;
|
||||||
|
font-size:1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
#backgroundPopup{
|
||||||
|
display:none;
|
||||||
|
position:fixed;
|
||||||
|
_position:absolute; /* ie6*/
|
||||||
|
height:100%;
|
||||||
|
opacity: .5;
|
||||||
|
width:100%;
|
||||||
|
top:0;
|
||||||
|
left:0;
|
||||||
|
background:#000000;
|
||||||
|
border:1px solid #cecece;
|
||||||
|
z-index:101;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* install */
|
||||||
|
|
||||||
|
#install li {
|
||||||
|
list-style-type: circle;
|
||||||
|
list-style-position: inside;
|
||||||
|
margin-left: 2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
#check-nv, #check-nm {
|
||||||
|
color: #2f7599;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#check-nv:hover, #check-nm:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* chat */
|
||||||
|
|
||||||
|
.message {
|
||||||
|
font-family: Arial, Helvetica, sans-serif;
|
||||||
|
font-size: 12px;
|
||||||
|
color: #4F4F4F;
|
||||||
|
padding: 15px 0px 0px 0px;
|
||||||
|
line-height: 17px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.message span.time {
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.message span.nuser {
|
||||||
|
color: #B11E23;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.message span.nagent {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.message span.minf {
|
||||||
|
color: #1E48B1;
|
||||||
|
font-size: 11px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.message span.mevent {
|
||||||
|
color: #A1A1A1;
|
||||||
|
font-size: 11px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.message span.mhidden {
|
||||||
|
color: #A1A1A1;
|
||||||
|
font-size: 11px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.message span.mconn {
|
||||||
|
color: #A1A1A1;
|
||||||
|
font-size: 11px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* updates */
|
||||||
|
|
||||||
|
#news {
|
||||||
|
font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
|
||||||
|
font-size: 11px;
|
||||||
|
margin-bottom:15px;
|
||||||
|
padding:4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.newstext {
|
||||||
|
margin-bottom:1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* rtl rules */
|
||||||
|
|
||||||
|
.lrtl .dashitem img, .lrtl #dashlocalesPopup h2 img, .lrtl #offwarn img {
|
||||||
|
float: right;
|
||||||
|
padding-right:0px;
|
||||||
|
padding-left:10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lrtl .fleftlabel {
|
||||||
|
float: right;
|
||||||
|
width: 100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lrtl .fdescr {
|
||||||
|
float:right;
|
||||||
|
padding-right:10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.lrtl .field .subfield {
|
||||||
|
padding-right: 30px;
|
||||||
|
background: url(images/subitem_rtl.gif) no-repeat 99% 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.lrtl .fvalue {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lrtl .logpane .wlabel {
|
||||||
|
float: right;
|
||||||
|
margin-left:10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lrtl .logpane .wvalue {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lrtl .fvaluewithta {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lrtl #togglediv {
|
||||||
|
float:left;
|
||||||
|
padding-left:10px;
|
||||||
|
}
|
328
src/messenger/webim/epl-v10.html
Normal file
@ -0,0 +1,328 @@
|
|||||||
|
<html xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||||
|
xmlns:w="urn:schemas-microsoft-com:office:word"
|
||||||
|
xmlns="http://www.w3.org/TR/REC-html40">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
|
||||||
|
<meta name=ProgId content=Word.Document>
|
||||||
|
<meta name=Generator content="Microsoft Word 9">
|
||||||
|
<meta name=Originator content="Microsoft Word 9">
|
||||||
|
<link rel=File-List
|
||||||
|
href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
|
||||||
|
<title>Eclipse Public License - Version 1.0</title>
|
||||||
|
<!--[if gte mso 9]><xml>
|
||||||
|
<o:DocumentProperties>
|
||||||
|
<o:Revision>2</o:Revision>
|
||||||
|
<o:TotalTime>3</o:TotalTime>
|
||||||
|
<o:Created>2004-03-05T23:03:00Z</o:Created>
|
||||||
|
<o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
|
||||||
|
<o:Pages>4</o:Pages>
|
||||||
|
<o:Words>1626</o:Words>
|
||||||
|
<o:Characters>9270</o:Characters>
|
||||||
|
<o:Lines>77</o:Lines>
|
||||||
|
<o:Paragraphs>18</o:Paragraphs>
|
||||||
|
<o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
|
||||||
|
<o:Version>9.4402</o:Version>
|
||||||
|
</o:DocumentProperties>
|
||||||
|
</xml><![endif]--><!--[if gte mso 9]><xml>
|
||||||
|
<w:WordDocument>
|
||||||
|
<w:TrackRevisions/>
|
||||||
|
</w:WordDocument>
|
||||||
|
</xml><![endif]-->
|
||||||
|
<style>
|
||||||
|
<!--
|
||||||
|
/* Font Definitions */
|
||||||
|
@font-face
|
||||||
|
{font-family:Tahoma;
|
||||||
|
panose-1:2 11 6 4 3 5 4 4 2 4;
|
||||||
|
mso-font-charset:0;
|
||||||
|
mso-generic-font-family:swiss;
|
||||||
|
mso-font-pitch:variable;
|
||||||
|
mso-font-signature:553679495 -2147483648 8 0 66047 0;}
|
||||||
|
/* Style Definitions */
|
||||||
|
p.MsoNormal, li.MsoNormal, div.MsoNormal
|
||||||
|
{mso-style-parent:"";
|
||||||
|
margin:0in;
|
||||||
|
margin-bottom:.0001pt;
|
||||||
|
mso-pagination:widow-orphan;
|
||||||
|
font-size:12.0pt;
|
||||||
|
font-family:"Times New Roman";
|
||||||
|
mso-fareast-font-family:"Times New Roman";}
|
||||||
|
p
|
||||||
|
{margin-right:0in;
|
||||||
|
mso-margin-top-alt:auto;
|
||||||
|
mso-margin-bottom-alt:auto;
|
||||||
|
margin-left:0in;
|
||||||
|
mso-pagination:widow-orphan;
|
||||||
|
font-size:12.0pt;
|
||||||
|
font-family:"Times New Roman";
|
||||||
|
mso-fareast-font-family:"Times New Roman";}
|
||||||
|
p.BalloonText, li.BalloonText, div.BalloonText
|
||||||
|
{mso-style-name:"Balloon Text";
|
||||||
|
margin:0in;
|
||||||
|
margin-bottom:.0001pt;
|
||||||
|
mso-pagination:widow-orphan;
|
||||||
|
font-size:8.0pt;
|
||||||
|
font-family:Tahoma;
|
||||||
|
mso-fareast-font-family:"Times New Roman";}
|
||||||
|
@page Section1
|
||||||
|
{size:8.5in 11.0in;
|
||||||
|
margin:1.0in 1.25in 1.0in 1.25in;
|
||||||
|
mso-header-margin:.5in;
|
||||||
|
mso-footer-margin:.5in;
|
||||||
|
mso-paper-source:0;}
|
||||||
|
div.Section1
|
||||||
|
{page:Section1;}
|
||||||
|
-->
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body lang=EN-US style='tab-interval:.5in'>
|
||||||
|
|
||||||
|
<div class=Section1>
|
||||||
|
|
||||||
|
<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
|
||||||
|
THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE,
|
||||||
|
REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
|
||||||
|
OF THIS AGREEMENT.</span> </p>
|
||||||
|
|
||||||
|
<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
|
||||||
|
|
||||||
|
<p><span style='font-size:10.0pt'>"Contribution" means:</span> </p>
|
||||||
|
|
||||||
|
<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
|
||||||
|
in the case of the initial Contributor, the initial code and documentation
|
||||||
|
distributed under this Agreement, and<br clear=left>
|
||||||
|
b) in the case of each subsequent Contributor:</span></p>
|
||||||
|
|
||||||
|
<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
|
||||||
|
changes to the Program, and</span></p>
|
||||||
|
|
||||||
|
<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
|
||||||
|
additions to the Program;</span></p>
|
||||||
|
|
||||||
|
<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
|
||||||
|
such changes and/or additions to the Program originate from and are distributed
|
||||||
|
by that particular Contributor. A Contribution 'originates' from a Contributor
|
||||||
|
if it was added to the Program by such Contributor itself or anyone acting on
|
||||||
|
such Contributor's behalf. Contributions do not include additions to the
|
||||||
|
Program which: (i) are separate modules of software distributed in conjunction
|
||||||
|
with the Program under their own license agreement, and (ii) are not derivative
|
||||||
|
works of the Program. </span></p>
|
||||||
|
|
||||||
|
<p><span style='font-size:10.0pt'>"Contributor" means any person or
|
||||||
|
entity that distributes the Program.</span> </p>
|
||||||
|
|
||||||
|
<p><span style='font-size:10.0pt'>"Licensed Patents " mean patent
|
||||||
|
claims licensable by a Contributor which are necessarily infringed by the use
|
||||||
|
or sale of its Contribution alone or when combined with the Program. </span></p>
|
||||||
|
|
||||||
|
<p><span style='font-size:10.0pt'>"Program" means the Contributions
|
||||||
|
distributed in accordance with this Agreement.</span> </p>
|
||||||
|
|
||||||
|
<p><span style='font-size:10.0pt'>"Recipient" means anyone who
|
||||||
|
receives the Program under this Agreement, including all Contributors.</span> </p>
|
||||||
|
|
||||||
|
<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
|
||||||
|
|
||||||
|
<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
|
||||||
|
Subject to the terms of this Agreement, each Contributor hereby grants Recipient
|
||||||
|
a non-exclusive, worldwide, royalty-free copyright license to<span
|
||||||
|
style='color:red'> </span>reproduce, prepare derivative works of, publicly
|
||||||
|
display, publicly perform, distribute and sublicense the Contribution of such
|
||||||
|
Contributor, if any, and such derivative works, in source code and object code
|
||||||
|
form.</span></p>
|
||||||
|
|
||||||
|
<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
|
||||||
|
Subject to the terms of this Agreement, each Contributor hereby grants
|
||||||
|
Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
|
||||||
|
patent license under Licensed Patents to make, use, sell, offer to sell, import
|
||||||
|
and otherwise transfer the Contribution of such Contributor, if any, in source
|
||||||
|
code and object code form. This patent license shall apply to the combination
|
||||||
|
of the Contribution and the Program if, at the time the Contribution is added
|
||||||
|
by the Contributor, such addition of the Contribution causes such combination
|
||||||
|
to be covered by the Licensed Patents. The patent license shall not apply to
|
||||||
|
any other combinations which include the Contribution. No hardware per se is
|
||||||
|
licensed hereunder. </span></p>
|
||||||
|
|
||||||
|
<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
|
||||||
|
Recipient understands that although each Contributor grants the licenses to its
|
||||||
|
Contributions set forth herein, no assurances are provided by any Contributor
|
||||||
|
that the Program does not infringe the patent or other intellectual property
|
||||||
|
rights of any other entity. Each Contributor disclaims any liability to Recipient
|
||||||
|
for claims brought by any other entity based on infringement of intellectual
|
||||||
|
property rights or otherwise. As a condition to exercising the rights and
|
||||||
|
licenses granted hereunder, each Recipient hereby assumes sole responsibility
|
||||||
|
to secure any other intellectual property rights needed, if any. For example,
|
||||||
|
if a third party patent license is required to allow Recipient to distribute
|
||||||
|
the Program, it is Recipient's responsibility to acquire that license before
|
||||||
|
distributing the Program.</span></p>
|
||||||
|
|
||||||
|
<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
|
||||||
|
Each Contributor represents that to its knowledge it has sufficient copyright
|
||||||
|
rights in its Contribution, if any, to grant the copyright license set forth in
|
||||||
|
this Agreement. </span></p>
|
||||||
|
|
||||||
|
<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
|
||||||
|
|
||||||
|
<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
|
||||||
|
Program in object code form under its own license agreement, provided that:</span>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
|
||||||
|
it complies with the terms and conditions of this Agreement; and</span></p>
|
||||||
|
|
||||||
|
<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
|
||||||
|
its license agreement:</span></p>
|
||||||
|
|
||||||
|
<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
|
||||||
|
effectively disclaims on behalf of all Contributors all warranties and
|
||||||
|
conditions, express and implied, including warranties or conditions of title
|
||||||
|
and non-infringement, and implied warranties or conditions of merchantability
|
||||||
|
and fitness for a particular purpose; </span></p>
|
||||||
|
|
||||||
|
<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
|
||||||
|
effectively excludes on behalf of all Contributors all liability for damages,
|
||||||
|
including direct, indirect, special, incidental and consequential damages, such
|
||||||
|
as lost profits; </span></p>
|
||||||
|
|
||||||
|
<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
|
||||||
|
states that any provisions which differ from this Agreement are offered by that
|
||||||
|
Contributor alone and not by any other party; and</span></p>
|
||||||
|
|
||||||
|
<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
|
||||||
|
states that source code for the Program is available from such Contributor, and
|
||||||
|
informs licensees how to obtain it in a reasonable manner on or through a
|
||||||
|
medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
|
||||||
|
|
||||||
|
<p><span style='font-size:10.0pt'>When the Program is made available in source
|
||||||
|
code form:</span> </p>
|
||||||
|
|
||||||
|
<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
|
||||||
|
it must be made available under this Agreement; and </span></p>
|
||||||
|
|
||||||
|
<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
|
||||||
|
copy of this Agreement must be included with each copy of the Program. </span></p>
|
||||||
|
|
||||||
|
<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
|
||||||
|
copyright notices contained within the Program. </span></p>
|
||||||
|
|
||||||
|
<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
|
||||||
|
originator of its Contribution, if any, in a manner that reasonably allows
|
||||||
|
subsequent Recipients to identify the originator of the Contribution. </span></p>
|
||||||
|
|
||||||
|
<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
|
||||||
|
|
||||||
|
<p><span style='font-size:10.0pt'>Commercial distributors of software may
|
||||||
|
accept certain responsibilities with respect to end users, business partners
|
||||||
|
and the like. While this license is intended to facilitate the commercial use
|
||||||
|
of the Program, the Contributor who includes the Program in a commercial
|
||||||
|
product offering should do so in a manner which does not create potential
|
||||||
|
liability for other Contributors. Therefore, if a Contributor includes the
|
||||||
|
Program in a commercial product offering, such Contributor ("Commercial
|
||||||
|
Contributor") hereby agrees to defend and indemnify every other
|
||||||
|
Contributor ("Indemnified Contributor") against any losses, damages and
|
||||||
|
costs (collectively "Losses") arising from claims, lawsuits and other
|
||||||
|
legal actions brought by a third party against the Indemnified Contributor to
|
||||||
|
the extent caused by the acts or omissions of such Commercial Contributor in
|
||||||
|
connection with its distribution of the Program in a commercial product
|
||||||
|
offering. The obligations in this section do not apply to any claims or Losses
|
||||||
|
relating to any actual or alleged intellectual property infringement. In order
|
||||||
|
to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
|
||||||
|
Contributor in writing of such claim, and b) allow the Commercial Contributor
|
||||||
|
to control, and cooperate with the Commercial Contributor in, the defense and
|
||||||
|
any related settlement negotiations. The Indemnified Contributor may participate
|
||||||
|
in any such claim at its own expense.</span> </p>
|
||||||
|
|
||||||
|
<p><span style='font-size:10.0pt'>For example, a Contributor might include the
|
||||||
|
Program in a commercial product offering, Product X. That Contributor is then a
|
||||||
|
Commercial Contributor. If that Commercial Contributor then makes performance
|
||||||
|
claims, or offers warranties related to Product X, those performance claims and
|
||||||
|
warranties are such Commercial Contributor's responsibility alone. Under this
|
||||||
|
section, the Commercial Contributor would have to defend claims against the
|
||||||
|
other Contributors related to those performance claims and warranties, and if a
|
||||||
|
court requires any other Contributor to pay any damages as a result, the
|
||||||
|
Commercial Contributor must pay those damages.</span> </p>
|
||||||
|
|
||||||
|
<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
|
||||||
|
|
||||||
|
<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
|
||||||
|
AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
|
||||||
|
WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
|
||||||
|
WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
|
||||||
|
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
|
||||||
|
responsible for determining the appropriateness of using and distributing the
|
||||||
|
Program and assumes all risks associated with its exercise of rights under this
|
||||||
|
Agreement , including but not limited to the risks and costs of program errors,
|
||||||
|
compliance with applicable laws, damage to or loss of data, programs or
|
||||||
|
equipment, and unavailability or interruption of operations. </span></p>
|
||||||
|
|
||||||
|
<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
|
||||||
|
|
||||||
|
<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
|
||||||
|
AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
|
||||||
|
OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
|
||||||
|
THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
|
||||||
|
THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
|
||||||
|
|
||||||
|
<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
|
||||||
|
|
||||||
|
<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
|
||||||
|
or unenforceable under applicable law, it shall not affect the validity or
|
||||||
|
enforceability of the remainder of the terms of this Agreement, and without
|
||||||
|
further action by the parties hereto, such provision shall be reformed to the
|
||||||
|
minimum extent necessary to make such provision valid and enforceable.</span> </p>
|
||||||
|
|
||||||
|
<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
|
||||||
|
against any entity (including a cross-claim or counterclaim in a lawsuit)
|
||||||
|
alleging that the Program itself (excluding combinations of the Program with
|
||||||
|
other software or hardware) infringes such Recipient's patent(s), then such
|
||||||
|
Recipient's rights granted under Section 2(b) shall terminate as of the date
|
||||||
|
such litigation is filed. </span></p>
|
||||||
|
|
||||||
|
<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
|
||||||
|
shall terminate if it fails to comply with any of the material terms or
|
||||||
|
conditions of this Agreement and does not cure such failure in a reasonable
|
||||||
|
period of time after becoming aware of such noncompliance. If all Recipient's
|
||||||
|
rights under this Agreement terminate, Recipient agrees to cease use and
|
||||||
|
distribution of the Program as soon as reasonably practicable. However,
|
||||||
|
Recipient's obligations under this Agreement and any licenses granted by
|
||||||
|
Recipient relating to the Program shall continue and survive. </span></p>
|
||||||
|
|
||||||
|
<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
|
||||||
|
copies of this Agreement, but in order to avoid inconsistency the Agreement is
|
||||||
|
copyrighted and may only be modified in the following manner. The Agreement
|
||||||
|
Steward reserves the right to publish new versions (including revisions) of
|
||||||
|
this Agreement from time to time. No one other than the Agreement Steward has
|
||||||
|
the right to modify this Agreement. The Eclipse Foundation is the initial
|
||||||
|
Agreement Steward. The Eclipse Foundation may assign the responsibility to
|
||||||
|
serve as the Agreement Steward to a suitable separate entity. Each new version
|
||||||
|
of the Agreement will be given a distinguishing version number. The Program
|
||||||
|
(including Contributions) may always be distributed subject to the version of
|
||||||
|
the Agreement under which it was received. In addition, after a new version of
|
||||||
|
the Agreement is published, Contributor may elect to distribute the Program
|
||||||
|
(including its Contributions) under the new version. Except as expressly stated
|
||||||
|
in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
|
||||||
|
the intellectual property of any Contributor under this Agreement, whether
|
||||||
|
expressly, by implication, estoppel or otherwise. All rights in the Program not
|
||||||
|
expressly granted under this Agreement are reserved.</span> </p>
|
||||||
|
|
||||||
|
<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
|
||||||
|
State of New York and the intellectual property laws of the United States of
|
||||||
|
America. No party to this Agreement will bring a legal action under this
|
||||||
|
Agreement more than one year after the cause of action arose. Each party waives
|
||||||
|
its rights to a jury trial in any resulting litigation.</span> </p>
|
||||||
|
|
||||||
|
<p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
339
src/messenger/webim/gpl-2.0.txt
Normal file
@ -0,0 +1,339 @@
|
|||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
Version 2, June 1991
|
||||||
|
|
||||||
|
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
||||||
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
Preamble
|
||||||
|
|
||||||
|
The licenses for most software are designed to take away your
|
||||||
|
freedom to share and change it. By contrast, the GNU General Public
|
||||||
|
License is intended to guarantee your freedom to share and change free
|
||||||
|
software--to make sure the software is free for all its users. This
|
||||||
|
General Public License applies to most of the Free Software
|
||||||
|
Foundation's software and to any other program whose authors commit to
|
||||||
|
using it. (Some other Free Software Foundation software is covered by
|
||||||
|
the GNU Lesser General Public License instead.) You can apply it to
|
||||||
|
your programs, too.
|
||||||
|
|
||||||
|
When we speak of free software, we are referring to freedom, not
|
||||||
|
price. Our General Public Licenses are designed to make sure that you
|
||||||
|
have the freedom to distribute copies of free software (and charge for
|
||||||
|
this service if you wish), that you receive source code or can get it
|
||||||
|
if you want it, that you can change the software or use pieces of it
|
||||||
|
in new free programs; and that you know you can do these things.
|
||||||
|
|
||||||
|
To protect your rights, we need to make restrictions that forbid
|
||||||
|
anyone to deny you these rights or to ask you to surrender the rights.
|
||||||
|
These restrictions translate to certain responsibilities for you if you
|
||||||
|
distribute copies of the software, or if you modify it.
|
||||||
|
|
||||||
|
For example, if you distribute copies of such a program, whether
|
||||||
|
gratis or for a fee, you must give the recipients all the rights that
|
||||||
|
you have. You must make sure that they, too, receive or can get the
|
||||||
|
source code. And you must show them these terms so they know their
|
||||||
|
rights.
|
||||||
|
|
||||||
|
We protect your rights with two steps: (1) copyright the software, and
|
||||||
|
(2) offer you this license which gives you legal permission to copy,
|
||||||
|
distribute and/or modify the software.
|
||||||
|
|
||||||
|
Also, for each author's protection and ours, we want to make certain
|
||||||
|
that everyone understands that there is no warranty for this free
|
||||||
|
software. If the software is modified by someone else and passed on, we
|
||||||
|
want its recipients to know that what they have is not the original, so
|
||||||
|
that any problems introduced by others will not reflect on the original
|
||||||
|
authors' reputations.
|
||||||
|
|
||||||
|
Finally, any free program is threatened constantly by software
|
||||||
|
patents. We wish to avoid the danger that redistributors of a free
|
||||||
|
program will individually obtain patent licenses, in effect making the
|
||||||
|
program proprietary. To prevent this, we have made it clear that any
|
||||||
|
patent must be licensed for everyone's free use or not licensed at all.
|
||||||
|
|
||||||
|
The precise terms and conditions for copying, distribution and
|
||||||
|
modification follow.
|
||||||
|
|
||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
|
|
||||||
|
0. This License applies to any program or other work which contains
|
||||||
|
a notice placed by the copyright holder saying it may be distributed
|
||||||
|
under the terms of this General Public License. The "Program", below,
|
||||||
|
refers to any such program or work, and a "work based on the Program"
|
||||||
|
means either the Program or any derivative work under copyright law:
|
||||||
|
that is to say, a work containing the Program or a portion of it,
|
||||||
|
either verbatim or with modifications and/or translated into another
|
||||||
|
language. (Hereinafter, translation is included without limitation in
|
||||||
|
the term "modification".) Each licensee is addressed as "you".
|
||||||
|
|
||||||
|
Activities other than copying, distribution and modification are not
|
||||||
|
covered by this License; they are outside its scope. The act of
|
||||||
|
running the Program is not restricted, and the output from the Program
|
||||||
|
is covered only if its contents constitute a work based on the
|
||||||
|
Program (independent of having been made by running the Program).
|
||||||
|
Whether that is true depends on what the Program does.
|
||||||
|
|
||||||
|
1. You may copy and distribute verbatim copies of the Program's
|
||||||
|
source code as you receive it, in any medium, provided that you
|
||||||
|
conspicuously and appropriately publish on each copy an appropriate
|
||||||
|
copyright notice and disclaimer of warranty; keep intact all the
|
||||||
|
notices that refer to this License and to the absence of any warranty;
|
||||||
|
and give any other recipients of the Program a copy of this License
|
||||||
|
along with the Program.
|
||||||
|
|
||||||
|
You may charge a fee for the physical act of transferring a copy, and
|
||||||
|
you may at your option offer warranty protection in exchange for a fee.
|
||||||
|
|
||||||
|
2. You may modify your copy or copies of the Program or any portion
|
||||||
|
of it, thus forming a work based on the Program, and copy and
|
||||||
|
distribute such modifications or work under the terms of Section 1
|
||||||
|
above, provided that you also meet all of these conditions:
|
||||||
|
|
||||||
|
a) You must cause the modified files to carry prominent notices
|
||||||
|
stating that you changed the files and the date of any change.
|
||||||
|
|
||||||
|
b) You must cause any work that you distribute or publish, that in
|
||||||
|
whole or in part contains or is derived from the Program or any
|
||||||
|
part thereof, to be licensed as a whole at no charge to all third
|
||||||
|
parties under the terms of this License.
|
||||||
|
|
||||||
|
c) If the modified program normally reads commands interactively
|
||||||
|
when run, you must cause it, when started running for such
|
||||||
|
interactive use in the most ordinary way, to print or display an
|
||||||
|
announcement including an appropriate copyright notice and a
|
||||||
|
notice that there is no warranty (or else, saying that you provide
|
||||||
|
a warranty) and that users may redistribute the program under
|
||||||
|
these conditions, and telling the user how to view a copy of this
|
||||||
|
License. (Exception: if the Program itself is interactive but
|
||||||
|
does not normally print such an announcement, your work based on
|
||||||
|
the Program is not required to print an announcement.)
|
||||||
|
|
||||||
|
These requirements apply to the modified work as a whole. If
|
||||||
|
identifiable sections of that work are not derived from the Program,
|
||||||
|
and can be reasonably considered independent and separate works in
|
||||||
|
themselves, then this License, and its terms, do not apply to those
|
||||||
|
sections when you distribute them as separate works. But when you
|
||||||
|
distribute the same sections as part of a whole which is a work based
|
||||||
|
on the Program, the distribution of the whole must be on the terms of
|
||||||
|
this License, whose permissions for other licensees extend to the
|
||||||
|
entire whole, and thus to each and every part regardless of who wrote it.
|
||||||
|
|
||||||
|
Thus, it is not the intent of this section to claim rights or contest
|
||||||
|
your rights to work written entirely by you; rather, the intent is to
|
||||||
|
exercise the right to control the distribution of derivative or
|
||||||
|
collective works based on the Program.
|
||||||
|
|
||||||
|
In addition, mere aggregation of another work not based on the Program
|
||||||
|
with the Program (or with a work based on the Program) on a volume of
|
||||||
|
a storage or distribution medium does not bring the other work under
|
||||||
|
the scope of this License.
|
||||||
|
|
||||||
|
3. You may copy and distribute the Program (or a work based on it,
|
||||||
|
under Section 2) in object code or executable form under the terms of
|
||||||
|
Sections 1 and 2 above provided that you also do one of the following:
|
||||||
|
|
||||||
|
a) Accompany it with the complete corresponding machine-readable
|
||||||
|
source code, which must be distributed under the terms of Sections
|
||||||
|
1 and 2 above on a medium customarily used for software interchange; or,
|
||||||
|
|
||||||
|
b) Accompany it with a written offer, valid for at least three
|
||||||
|
years, to give any third party, for a charge no more than your
|
||||||
|
cost of physically performing source distribution, a complete
|
||||||
|
machine-readable copy of the corresponding source code, to be
|
||||||
|
distributed under the terms of Sections 1 and 2 above on a medium
|
||||||
|
customarily used for software interchange; or,
|
||||||
|
|
||||||
|
c) Accompany it with the information you received as to the offer
|
||||||
|
to distribute corresponding source code. (This alternative is
|
||||||
|
allowed only for noncommercial distribution and only if you
|
||||||
|
received the program in object code or executable form with such
|
||||||
|
an offer, in accord with Subsection b above.)
|
||||||
|
|
||||||
|
The source code for a work means the preferred form of the work for
|
||||||
|
making modifications to it. For an executable work, complete source
|
||||||
|
code means all the source code for all modules it contains, plus any
|
||||||
|
associated interface definition files, plus the scripts used to
|
||||||
|
control compilation and installation of the executable. However, as a
|
||||||
|
special exception, the source code distributed need not include
|
||||||
|
anything that is normally distributed (in either source or binary
|
||||||
|
form) with the major components (compiler, kernel, and so on) of the
|
||||||
|
operating system on which the executable runs, unless that component
|
||||||
|
itself accompanies the executable.
|
||||||
|
|
||||||
|
If distribution of executable or object code is made by offering
|
||||||
|
access to copy from a designated place, then offering equivalent
|
||||||
|
access to copy the source code from the same place counts as
|
||||||
|
distribution of the source code, even though third parties are not
|
||||||
|
compelled to copy the source along with the object code.
|
||||||
|
|
||||||
|
4. You may not copy, modify, sublicense, or distribute the Program
|
||||||
|
except as expressly provided under this License. Any attempt
|
||||||
|
otherwise to copy, modify, sublicense or distribute the Program is
|
||||||
|
void, and will automatically terminate your rights under this License.
|
||||||
|
However, parties who have received copies, or rights, from you under
|
||||||
|
this License will not have their licenses terminated so long as such
|
||||||
|
parties remain in full compliance.
|
||||||
|
|
||||||
|
5. You are not required to accept this License, since you have not
|
||||||
|
signed it. However, nothing else grants you permission to modify or
|
||||||
|
distribute the Program or its derivative works. These actions are
|
||||||
|
prohibited by law if you do not accept this License. Therefore, by
|
||||||
|
modifying or distributing the Program (or any work based on the
|
||||||
|
Program), you indicate your acceptance of this License to do so, and
|
||||||
|
all its terms and conditions for copying, distributing or modifying
|
||||||
|
the Program or works based on it.
|
||||||
|
|
||||||
|
6. Each time you redistribute the Program (or any work based on the
|
||||||
|
Program), the recipient automatically receives a license from the
|
||||||
|
original licensor to copy, distribute or modify the Program subject to
|
||||||
|
these terms and conditions. You may not impose any further
|
||||||
|
restrictions on the recipients' exercise of the rights granted herein.
|
||||||
|
You are not responsible for enforcing compliance by third parties to
|
||||||
|
this License.
|
||||||
|
|
||||||
|
7. If, as a consequence of a court judgment or allegation of patent
|
||||||
|
infringement or for any other reason (not limited to patent issues),
|
||||||
|
conditions are imposed on you (whether by court order, agreement or
|
||||||
|
otherwise) that contradict the conditions of this License, they do not
|
||||||
|
excuse you from the conditions of this License. If you cannot
|
||||||
|
distribute so as to satisfy simultaneously your obligations under this
|
||||||
|
License and any other pertinent obligations, then as a consequence you
|
||||||
|
may not distribute the Program at all. For example, if a patent
|
||||||
|
license would not permit royalty-free redistribution of the Program by
|
||||||
|
all those who receive copies directly or indirectly through you, then
|
||||||
|
the only way you could satisfy both it and this License would be to
|
||||||
|
refrain entirely from distribution of the Program.
|
||||||
|
|
||||||
|
If any portion of this section is held invalid or unenforceable under
|
||||||
|
any particular circumstance, the balance of the section is intended to
|
||||||
|
apply and the section as a whole is intended to apply in other
|
||||||
|
circumstances.
|
||||||
|
|
||||||
|
It is not the purpose of this section to induce you to infringe any
|
||||||
|
patents or other property right claims or to contest validity of any
|
||||||
|
such claims; this section has the sole purpose of protecting the
|
||||||
|
integrity of the free software distribution system, which is
|
||||||
|
implemented by public license practices. Many people have made
|
||||||
|
generous contributions to the wide range of software distributed
|
||||||
|
through that system in reliance on consistent application of that
|
||||||
|
system; it is up to the author/donor to decide if he or she is willing
|
||||||
|
to distribute software through any other system and a licensee cannot
|
||||||
|
impose that choice.
|
||||||
|
|
||||||
|
This section is intended to make thoroughly clear what is believed to
|
||||||
|
be a consequence of the rest of this License.
|
||||||
|
|
||||||
|
8. If the distribution and/or use of the Program is restricted in
|
||||||
|
certain countries either by patents or by copyrighted interfaces, the
|
||||||
|
original copyright holder who places the Program under this License
|
||||||
|
may add an explicit geographical distribution limitation excluding
|
||||||
|
those countries, so that distribution is permitted only in or among
|
||||||
|
countries not thus excluded. In such case, this License incorporates
|
||||||
|
the limitation as if written in the body of this License.
|
||||||
|
|
||||||
|
9. The Free Software Foundation may publish revised and/or new versions
|
||||||
|
of the General Public License from time to time. Such new versions will
|
||||||
|
be similar in spirit to the present version, but may differ in detail to
|
||||||
|
address new problems or concerns.
|
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the Program
|
||||||
|
specifies a version number of this License which applies to it and "any
|
||||||
|
later version", you have the option of following the terms and conditions
|
||||||
|
either of that version or of any later version published by the Free
|
||||||
|
Software Foundation. If the Program does not specify a version number of
|
||||||
|
this License, you may choose any version ever published by the Free Software
|
||||||
|
Foundation.
|
||||||
|
|
||||||
|
10. If you wish to incorporate parts of the Program into other free
|
||||||
|
programs whose distribution conditions are different, write to the author
|
||||||
|
to ask for permission. For software which is copyrighted by the Free
|
||||||
|
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||||
|
make exceptions for this. Our decision will be guided by the two goals
|
||||||
|
of preserving the free status of all derivatives of our free software and
|
||||||
|
of promoting the sharing and reuse of software generally.
|
||||||
|
|
||||||
|
NO WARRANTY
|
||||||
|
|
||||||
|
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||||
|
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||||
|
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||||
|
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||||
|
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||||
|
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||||
|
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||||
|
REPAIR OR CORRECTION.
|
||||||
|
|
||||||
|
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||||
|
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||||
|
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||||
|
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||||
|
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||||
|
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||||
|
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||||
|
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
How to Apply These Terms to Your New Programs
|
||||||
|
|
||||||
|
If you develop a new program, and you want it to be of the greatest
|
||||||
|
possible use to the public, the best way to achieve this is to make it
|
||||||
|
free software which everyone can redistribute and change under these terms.
|
||||||
|
|
||||||
|
To do so, attach the following notices to the program. It is safest
|
||||||
|
to attach them to the start of each source file to most effectively
|
||||||
|
convey the exclusion of warranty; and each file should have at least
|
||||||
|
the "copyright" line and a pointer to where the full notice is found.
|
||||||
|
|
||||||
|
<one line to give the program's name and a brief idea of what it does.>
|
||||||
|
Copyright (C) <year> <name of author>
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License along
|
||||||
|
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
|
||||||
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
|
||||||
|
If the program is interactive, make it output a short notice like this
|
||||||
|
when it starts in an interactive mode:
|
||||||
|
|
||||||
|
Gnomovision version 69, Copyright (C) year name of author
|
||||||
|
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||||
|
This is free software, and you are welcome to redistribute it
|
||||||
|
under certain conditions; type `show c' for details.
|
||||||
|
|
||||||
|
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||||
|
parts of the General Public License. Of course, the commands you use may
|
||||||
|
be called something other than `show w' and `show c'; they could even be
|
||||||
|
mouse-clicks or menu items--whatever suits your program.
|
||||||
|
|
||||||
|
You should also get your employer (if you work as a programmer) or your
|
||||||
|
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||||
|
necessary. Here is a sample; alter the names:
|
||||||
|
|
||||||
|
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||||
|
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||||
|
|
||||||
|
<signature of Ty Coon>, 1 April 1989
|
||||||
|
Ty Coon, President of Vice
|
||||||
|
|
||||||
|
This General Public License does not permit incorporating your program into
|
||||||
|
proprietary programs. If your program is a subroutine library, you may
|
||||||
|
consider it more useful to permit linking proprietary applications with the
|
||||||
|
library. If this is what you want to do, use the GNU Lesser General
|
||||||
|
Public License instead of this License.
|
Before Width: | Height: | Size: 372 B After Width: | Height: | Size: 372 B |
BIN
src/messenger/webim/images/buttons/createagent.gif
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
src/messenger/webim/images/buttons/createban.gif
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
src/messenger/webim/images/buttons/createdep.gif
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
src/messenger/webim/images/dash/blocked.gif
Normal file
After Width: | Height: | Size: 732 B |
BIN
src/messenger/webim/images/dash/canned.gif
Normal file
After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 340 B After Width: | Height: | Size: 340 B |
BIN
src/messenger/webim/images/dash/dep.gif
Normal file
After Width: | Height: | Size: 728 B |
BIN
src/messenger/webim/images/dash/exit.gif
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
src/messenger/webim/images/dash/getcode.gif
Normal file
After Width: | Height: | Size: 604 B |
BIN
src/messenger/webim/images/dash/history.gif
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
src/messenger/webim/images/dash/locale.gif
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
src/messenger/webim/images/dash/operators.gif
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
src/messenger/webim/images/dash/profile.gif
Normal file
After Width: | Height: | Size: 1.1 KiB |
19
src/messenger/webim/images/dash/readme.txt
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
"34aL volume 3.1" icons set
|
||||||
|
|
||||||
|
Ammount of icons:
|
||||||
|
60
|
||||||
|
|
||||||
|
Colors:
|
||||||
|
Colored, grey
|
||||||
|
|
||||||
|
Icon Sizes:
|
||||||
|
24x24
|
||||||
|
|
||||||
|
File Types:
|
||||||
|
.ico (RGBA, 256 color, 16 color),
|
||||||
|
.tiff (RGBA)
|
||||||
|
.gif (indexed)
|
||||||
|
.bmp (RGB - 1 color background),
|
||||||
|
.png (RGBA)
|
||||||
|
|
||||||
|
Note: These icons are free for use.
|
BIN
src/messenger/webim/images/dash/settings.gif
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
src/messenger/webim/images/dash/stat.gif
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
src/messenger/webim/images/dash/updates.gif
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
src/messenger/webim/images/dash/visitors.gif
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
src/messenger/webim/images/dash/warn.gif
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
src/messenger/webim/images/favicon.ico
Normal file
After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 162 B After Width: | Height: | Size: 162 B |
Before Width: | Height: | Size: 43 B After Width: | Height: | Size: 43 B |
Before Width: | Height: | Size: 49 B After Width: | Height: | Size: 49 B |
Before Width: | Height: | Size: 43 B After Width: | Height: | Size: 43 B |
Before Width: | Height: | Size: 162 B After Width: | Height: | Size: 162 B |
Before Width: | Height: | Size: 713 B After Width: | Height: | Size: 713 B |
Before Width: | Height: | Size: 60 B After Width: | Height: | Size: 60 B |
Before Width: | Height: | Size: 377 B After Width: | Height: | Size: 377 B |
Before Width: | Height: | Size: 68 B After Width: | Height: | Size: 68 B |
Before Width: | Height: | Size: 148 B After Width: | Height: | Size: 148 B |
Before Width: | Height: | Size: 199 B After Width: | Height: | Size: 199 B |
Before Width: | Height: | Size: 139 B After Width: | Height: | Size: 139 B |
Before Width: | Height: | Size: 142 B After Width: | Height: | Size: 142 B |
BIN
src/messenger/webim/images/logo.gif
Normal file
After Width: | Height: | Size: 796 B |
Before Width: | Height: | Size: 915 B After Width: | Height: | Size: 915 B |
BIN
src/messenger/webim/images/opaway.gif
Normal file
After Width: | Height: | Size: 3.4 KiB |
BIN
src/messenger/webim/images/oponline.gif
Normal file
After Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 914 B After Width: | Height: | Size: 914 B |
Before Width: | Height: | Size: 75 B After Width: | Height: | Size: 75 B |
Before Width: | Height: | Size: 74 B After Width: | Height: | Size: 74 B |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 55 B After Width: | Height: | Size: 55 B |
Before Width: | Height: | Size: 89 B After Width: | Height: | Size: 89 B |
Before Width: | Height: | Size: 43 B After Width: | Height: | Size: 43 B |
Before Width: | Height: | Size: 92 B After Width: | Height: | Size: 92 B |