author Dan Poltawski Thu, 31 Oct 2013 02:08:23 +0000 (10:08 +0800) committer Sam Hemelryk Fri, 1 Nov 2013 00:55:31 +0000 (08:55 +0800)
338 files changed:

index 980e2ae..421eca2 100644 (file)
@@ -149,12 +149,11 @@ switch (\$context->contextlevel) {
\$showroles = 1;
break;
case CONTEXT_COURSECAT:
break;
case CONTEXT_COURSE:
if (\$isfrontpage) {
-            admin_externalpage_setup('frontpageroles', '', array('contextid' => \$contextid, 'roleid' => \$roleid));
} else {
}
index 0590165..938fc90 100644 (file)
@@ -50,6 +50,14 @@ if (!has_any_capability(array('moodle/role:assign', 'moodle/role:safeoverride',
print_error('nopermissions', 'error', '', get_string('checkpermissions', 'core_role'));
}
\$PAGE->set_url(\$url);
+
+if (\$context->contextlevel == CONTEXT_USER and \$USER->id != \$context->instanceid) {
+    \$PAGE->set_context(context_course::instance(\$course->id));
+} else {
+    \$PAGE->set_context(\$context);
+}
+
\$PAGE->set_context(\$context);

\$courseid = \$course->id;
@@ -79,12 +87,11 @@ switch (\$context->contextlevel) {
\$showroles = 1;
break;
case CONTEXT_COURSECAT:
break;
case CONTEXT_COURSE:
if (\$isfrontpage) {
-            admin_externalpage_setup('frontpageroles', '', array('contextid' => \$contextid), \$CFG->wwwroot . '/' . \$CFG->admin . '/roles/check.php');
} else {
}
@@ -201,8 +201,7 @@ if (optional_param('savechanges', false, PARAM_BOOL) && confirm_sesskey() && \$de
\$event = \core\event\role_capabilities_updated::create(
array(
'context' => \$systemcontext,
-            'objectid' => \$roleid,
-            'other' => array('name' => \$definitiontable->get_role_name())
+            'objectid' => \$roleid
)
);
\$event->set_legacy_logdata(array(SITEID, 'role', \$action, 'admin/roles/define.php?action=view&roleid=' . \$tableroleid,
index bc506f1..ab80e69 100644 (file)
@@ -53,9 +53,19 @@ if (!has_capability('moodle/role:override', \$context)) {
\$safeoverridesonly = true;
}
\$PAGE->set_url(\$url);
-\$PAGE->set_context(\$context);

+if (\$context->contextlevel == CONTEXT_USER and \$USER->id != \$context->instanceid) {
+    \$PAGE->set_context(context_course::instance(\$course->id));
+        array('contextid'=>\$context->id, 'userid'=>\$context->instanceid, 'courseid'=>\$course->id)));
+
+} else {
+    \$PAGE->set_context(\$context);
+}
+
\$courseid = \$course->id;

\$returnurl = new moodle_url('/admin/roles/permissions.php', array('contextid' => \$context->id));
@@ -91,12 +101,11 @@ switch (\$context->contextlevel) {
\$showroles = 1;
break;
case CONTEXT_COURSECAT:
break;
case CONTEXT_COURSE:
if (\$isfrontpage) {
} else {
}
@@ -130,8 +139,7 @@ if (optional_param('savechanges', false, PARAM_BOOL) && confirm_sesskey()) {
array(
'context' => \$context,
'objectid' => \$roleid,
-            'courseid' => \$courseid,
-            'other' => array('name' => \$rolename)
+            'courseid' => \$courseid
)
);

index 8af137a..3670a86 100644 (file)
@@ -57,7 +57,14 @@ if (\$course) {
require_capability('moodle/role:review', \$context);
\$PAGE->set_url(\$url);
-\$PAGE->set_context(\$context);
+
+if (\$context->contextlevel == CONTEXT_USER and \$USER->id != \$context->instanceid) {
+    \$PAGE->set_context(context_course::instance(\$course->id));
+} else {
+    \$PAGE->set_context(\$context);
+}
+
\$courseid = \$course->id;

@@ -88,12 +95,11 @@ switch (\$context->contextlevel) {
\$showroles = 1;
break;
case CONTEXT_COURSECAT:
break;
case CONTEXT_COURSE:
if (\$isfrontpage) {
} else {
}
index c62c979..99ded8f 100644 (file)
@@ -41,11 +41,17 @@ \$systemcontext = context_system::instance();
\$baseurl = new moodle_url('/admin/roles/usersroles.php', array('userid'=>\$userid, 'courseid'=>\$courseid));

\$PAGE->set_url(\$baseurl);
-\$PAGE->set_context(\$coursecontext);

+if (\$course->id == SITEID) {
+    \$PAGE->set_context(\$usercontext);
+} else {
+    \$PAGE->set_context(\$coursecontext);
+}
+
\$canview = has_any_capability(array('moodle/role:assign', 'moodle/role:safeoverride',
'moodle/role:override', 'moodle/role:manage'), \$usercontext);
if (!\$canview) {
@@ -120,10 +126,10 @@ \$title = get_string('xroleassignments', 'core_role', \$fullname);

\$PAGE->set_title(\$title);
-if (\$courseid != SITEID) {
+if (\$courseid == SITEID) {
} else {
}
index c8444c5..3236444 100644 (file)
@@ -14,6 +14,7 @@ \$PAGE->set_url('/admin/settings.php', array('section' => \$section));

index e52f6ff..d435022 100644 (file)
@@ -69,29 +69,6 @@ if (!during_initial_install()) { //do not use during installation
}

-
-
-
-
-
-
-        \$questioncapabilities = array(
-                'moodle/question:editmine',
-                'moodle/question:editall',
-                'moodle/question:viewmine',
-                'moodle/question:viewall',
-                'moodle/question:movemine',
-                'moodle/question:moveall');
-
-        if (!empty(\$SITE->legacyfiles) and \$SITE->legacyfiles === 2) {
-        }
}
}
index 6b4f88f..91afdcf 100644 (file)
@@ -28,7 +28,8 @@
require_once(__DIR__ . '/../../../lib/behat/behat_base.php');
require_once(__DIR__ . '/../../../lib/behat/behat_field_manager.php');

-use Behat\Gherkin\Node\TableNode as TableNode,
+use Behat\Behat\Context\Step\Given as Given,
+    Behat\Gherkin\Node\TableNode as TableNode,
Behat\Mink\Exception\ElementNotFoundException as ElementNotFoundException;

/**
@@ -110,4 +111,23 @@ class behat_admin extends behat_base {
\$this->getSession()->wait(\$timeout, \$javascript);
}
}
+
+    /**
+     *
+     * @Given /^I go to notifications page\$/
+     * @return Given[]
+     */
+        if (\$this->running_javascript()) {
+            return array(
+                new Given('I expand "' . get_string('administrationsite') . '" node'),
+                new Given('I follow "' . get_string('notifications') . '"')
+            );
+        } else {
+            return array(
+                new Given('I follow "' . get_string('administrationsite') . '"')
+            );
+        }
+    }
}
index f17f092..86231b2 100644 (file)
@@ -15,7 +15,8 @@ Feature: Display extended course names
And I should not see "C_shortname Course fullname"

Scenario: Courses list with extended course names
-    Given I click on "Courses" "link" in the "//div[@id='settingsnav']/descendant::li[contains(concat(' ', normalize-space(@class), ' '), ' type_setting ')][not(contains(., 'Site administration'))][contains(., 'Appearance')]" "xpath_element"
+    Given I go to notifications page
+    And I click on "Courses" "link" in the "//div[@id='settingsnav']/descendant::li[contains(concat(' ', normalize-space(@class), ' '), ' type_setting ')][contains(., 'Appearance')]" "xpath_element"
And I check "Display extended course names"
When I press "Save changes"
And I am on homepage
index 364b54e..c5dc276 100644 (file)
@@ -20,6 +20,10 @@ Feature: Page contents assertions
And I wait "2" seconds
And I hover ".region-content .generaltable td span" "css_element"
Then I should see "I'm the description"
+    And "Grouping" "select" in the "region-main" "region" should be visible
+    And "Group" "select" should be visible
+    And "Messaging" "link" in the "Administration" "block" should not be visible
And I should see "Filter groups by"
And I should not see "Filter groupssss by"
And I should see "Group members" in the ".region-content table th.c1" "css_element"
index 6aaec2f..71c54fe 100644 (file)
@@ -24,6 +24,7 @@
require(dirname(dirname(dirname(dirname(__FILE__)))) . '/config.php');

require_capability('tool/customlang:edit', context_system::instance());
@@ -32,11 +33,10 @@ \$lng                    = required_param('lng', PARAM_LANG);
\$currentpage            = optional_param('p', 0, PARAM_INT);
\$translatorsubmitted    = optional_param('translatorsubmitted', 0, PARAM_BOOL);

-\$PAGE->set_pagelayout('report'); // Allows for wide page contents.
-\$PAGE->set_title(get_string('pluginname', 'tool_customlang'));
+    new moodle_url('/admin/tool/customlang/edit.php', array('lng' => \$lng)),
+    array('pagelayout' => 'report')); // Hack: allows for wide page contents.
+
\$PAGE->requires->js_init_call('M.tool_customlang.init_editor', array(), true);

if (empty(\$lng)) {
index aff45ef..431a911 100644 (file)
@@ -29,7 +29,7 @@ require(dirname(dirname(dirname(dirname(__FILE__)))) . '/config.php');

require_capability('tool/customlang:view', context_system::instance());

\$action  = optional_param('action', '', PARAM_ALPHA);
index 7499500..2e43b4c 100644 (file)
@@ -317,7 +317,7 @@ class tool_generator_testplan_backend extends tool_generator_backend {

// Checks that the selected course has enough users.
\$coursesizes = tool_generator_course_backend::get_users_per_size();
-        if (count(\$users) < \$coursesizes[\$size]) {
+        if (count(\$users) < self::\$users[\$size]) {
\$errors['size'] = get_string('notenoughusers', 'tool_generator');
}

index 1a1866c..e759c43 100644 (file)
@@ -392,8 +392,10 @@ class tool_installaddon_installer {
*
* @param string \$source full path to the existing directory
* @param string \$target full path to the new location of the directory
+     * @param int \$dirpermissions
+     * @param int \$filepermissions
*/
-    public function move_directory(\$source, \$target) {
+    public function move_directory(\$source, \$target, \$dirpermissions, \$filepermissions) {

if (file_exists(\$target)) {
@@ -405,7 +407,16 @@ class tool_installaddon_installer {
throw new tool_installaddon_installer_exception('err_no_such_folder', array('path' => \$source));
}

-        make_writable_directory(\$target);
+        if (!file_exists(\$target)) {
+            // Do not use make_writable_directory() here - it is intended for dataroot only.
+            mkdir(\$target, true);
+            @chmod(\$target, \$dirpermissions);
+        }
+
+        if (!is_writable(\$target)) {
+            closedir(\$handle);
+            throw new tool_installaddon_installer_exception('err_folder_not_writable', array('path' => \$target));
+        }

\$sourcepath = \$source.'/'.\$filename;
@@ -416,10 +427,11 @@ class tool_installaddon_installer {
}

if (is_dir(\$sourcepath)) {
-                \$this->move_directory(\$sourcepath, \$targetpath);
+                \$this->move_directory(\$sourcepath, \$targetpath, \$dirpermissions, \$filepermissions);

} else {
rename(\$sourcepath, \$targetpath);
+                @chmod(\$targetpath, \$filepermissions);
}
}

index 7dea2cc..b80af83 100644 (file)
@@ -69,6 +69,10 @@ if (file_exists(\$plugintypepath.'/'.\$pluginname)) {
get_string('invaliddata', 'core_error'));
}

-\$installer->move_directory(\$zipcontentpath.'/'.\$pluginname, \$plugintypepath.'/'.\$pluginname);
+// Copy permissions form the plugin type directory.
+\$dirpermissions = fileperms(\$plugintypepath);
+\$filepermissions = (\$dirpermissions & 0666); // Strip execute flags.
+
+\$installer->move_directory(\$zipcontentpath.'/'.\$pluginname, \$plugintypepath.'/'.\$pluginname, \$dirpermissions, \$filepermissions);
index 28e37bd..948294c 100644 (file)
@@ -33,7 +33,7 @@ defined('MOODLE_INTERNAL') || die();
* @copyright 2013 David Mudrak <david@moodle.com>
* @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/

-        \$installer->move_directory(\$jobroot.'/contents', \$jobroot.'/moved');
+        \$installer->move_directory(\$jobroot.'/contents', \$jobroot.'/moved', 0777, 0666);

\$this->assertFalse(is_dir(\$jobroot.'/contents'));
index a9f7afa..82f7ccc 100644 (file)
@@ -85,7 +85,7 @@ \$today = time();
\$today = make_timestamp(date('Y', \$today), date('m', \$today), date('d', \$today), 0, 0, 0);

// array of all valid fields for validation
-\$STD_FIELDS = array('id', 'firstname', 'lastname', 'username', 'email',
'city', 'country', 'lang', 'timezone', 'mailformat',
'maildisplay', 'maildigest', 'htmleditor', 'autosubscribe',
'institution', 'department', 'idnumber', 'skype',
@@ -97,6 +97,8 @@ \$STD_FIELDS = array('id', 'firstname', 'lastname', 'username', 'email',
'deleted',     // 1 means delete user
'mnethostid',  // Can not be used for adding, updating or deleting of users - only for enrolments, groups, cohorts and suspending.
);
+// Include all name fields.
+\$STD_FIELDS = array_merge(\$STD_FIELDS, get_all_user_name_fields());

\$PRF_FIELDS = array();

index 9dfc288..f922995 100644 (file)
@@ -26,7 +26,7 @@
defined('MOODLE_INTERNAL') || die();

require_once \$CFG->libdir.'/formslib.php';
-
+require_once(\$CFG->dirroot . '/user/editlib.php');

/**
* Upload a file CVS file with user information.

// look for other required data
if (\$optype != UU_USER_UPDATE) {
-            if (!in_array('firstname', \$columns)) {
-                \$errors['uutype'] = get_string('missingfield', 'error', 'firstname');
-            }
-
-            if (!in_array('lastname', \$columns)) {
-                if (isset(\$errors['uutype'])) {
-                    \$errors['uutype'] = '';
-                } else {
-                    \$errors['uutype'] = ' ';
+            \$missing = array();
+                    \$missing[] = get_string('missingfield', 'error', \$requiredusername);;
}
-                \$errors['uutype'] .= get_string('missingfield', 'error', 'lastname');
}
-
+            if (\$missing) {
+                \$errors['uutype'] = implode('<br />',  \$missing);
+            }
if (!in_array('email', \$columns) and empty(\$data['email'])) {
}
}
-
return \$errors;
}

index 7439b27..46862a7 100644 (file)
@@ -39,6 +39,7 @@ class create_and_clean_temp_stuff extends backup_execution_step {
backup_helper::check_and_create_backup_dir(\$this->get_backupid());// Create backup temp dir
backup_helper::clear_backup_dir(\$this->get_backupid(), \$progress);           // Empty temp dir, just in case
backup_helper::delete_old_backup_dirs(time() - (4 * 60 * 60), \$progress);    // Delete > 4 hours temp dirs
+        backup_controller_dbops::drop_backup_ids_temp_table(\$this->get_backupid()); // Drop ids temp table
backup_controller_dbops::create_backup_ids_temp_table(\$this->get_backupid()); // Create ids temp table
\$progress->end_progress();
}
index 7550261..b46ed6b 100644 (file)
\$section_included = new restore_section_included_setting(\$settingname, base_setting::IS_BOOLEAN, true);
if (is_number(\$this->info->title)) {
\$label = get_string('includesection', 'backup', \$this->info->title);
+        } elseif (empty(\$this->info->title)) { // Don't throw error if title is empty, gracefully continue restore.
+            \$this->log('Section title missing in backup for section id '.\$this->info->sectionid, backup::LOG_WARNING, \$this->name);
+            \$label = get_string('unnamedsection', 'backup');
} else {
\$label = \$this->info->title;
}
index cb4577c..6d066b4 100644 (file)
@@ -160,8 +160,10 @@ abstract class backup_controller_dbops extends backup_dbops {
\$dbman = \$DB->get_manager(); // We are going to use database_manager services

\$targettablename = 'backup_ids_temp';
-        \$table = new xmldb_table(\$targettablename);
-        \$dbman->drop_table(\$table); // And drop it
+        if (\$dbman->table_exists(\$targettablename)) {
+            \$table = new xmldb_table(\$targettablename);
+            \$dbman->drop_table(\$table); // And drop it
+        }
}

/**
index a1aafb8..a6d5bce 100644 (file)
@@ -978,6 +978,15 @@ abstract class restore_dbops {
);

if (empty(\$file->repositoryid)) {
+                // If contenthash is empty then gracefully skip adding file.
+                if (empty(\$file->contenthash)) {
+                    \$result = new stdClass();
+                    \$result->code = 'file_missing_in_backup';
+                    \$result->message = sprintf('missing file (%s) contenthash in backup for component %s', \$file->filename, \$component);
+                    \$result->level = backup::LOG_WARNING;
+                    \$results[] = \$result;
+                    continue;
+                }
// this is a regular file, it must be present in the backup pool
\$backuppath = \$basepath . backup_file_manager::get_backup_content_file_location(\$file->contenthash);

index 66c2b3b..929d9a0 100644 (file)
+    \$PAGE->set_pagelayout('standard');
+} else {
}

\$PAGE->set_context(\$context);
-\$PAGE->set_pagelayout('standard');

if (\$return !== 0) {
\$returnurl = new moodle_url(\$return);
index 834af0c..9c3db8c 100644 (file)
}
+    \$PAGE->set_pagelayout('standard');
+} else {
}

@@ -60,11 +65,9 @@ \$PAGE->set_context(\$context);

\$PAGE->set_title(\$strrecipients);
-\$PAGE->set_pagelayout('standard');

}
+    \$PAGE->set_pagelayout('standard');
+} else {
}

\$PAGE->set_context(\$context);
\$PAGE->set_url(\$currenturl);
-\$PAGE->set_pagelayout('standard');
-

index 51b3e89..3af6984 100644 (file)
+    \$PAGE->set_pagelayout('standard');
+} else {
}

\$PAGE->set_context(\$context);
-\$PAGE->set_pagelayout('standard');

if (\$delete && has_capability('moodle/badges:configurecriteria', \$context)) {
if (!\$confirm) {
index 6f52fa0..32efa61 100644 (file)
+    \$PAGE->set_pagelayout('standard');
+} else {
}

\$PAGE->set_context(\$context);
-\$PAGE->set_pagelayout('standard');

index b0a4783..61e9cc6 100644 (file)
}
+    \$PAGE->set_pagelayout('standard');
+} else {
}

\$PAGE->set_context(\$context);
\$PAGE->set_url(\$currenturl);
-\$PAGE->set_pagelayout('standard');
-

index d476cfc..6c73990 100644 (file)
@@ -79,7 +79,7 @@ if (\$type == BADGE_TYPE_SITE) {
\$PAGE->set_context(context_system::instance());
\$PAGE->set_heading(\$title . ': ' . \$hdr);
} else {
\$coursecontext = context_course::instance(\$course->id);
index e2dec7f..7801674 100644 (file)
}
+    \$PAGE->set_pagelayout('standard');
+} else {
}

\$PAGE->set_context(\$context);
\$PAGE->set_url(\$currenturl);
-\$PAGE->set_pagelayout('standard');
-

index d05a562..4e77e3d 100644 (file)
}
+    \$PAGE->set_pagelayout('standard');
+} else {
}

\$PAGE->set_context(\$context);
-\$PAGE->set_pagelayout('standard');

index b2ec8ab..bbfc989 100644 (file)
@@ -38,6 +38,7 @@ class block_community_manager {
\$community = \$this->block_community_get_course(\$course->url, \$userid);

if (empty(\$community)) {
+            \$community = new stdClass();
\$community->userid = \$userid;
\$community->coursename = \$course->name;
\$community->coursedescription = \$course->description;
index 5c9aa7d..d0542ac 100644 (file)
index 190c180..ce342d8 100644 (file)
index bed94d7..55e4047 100644 (file)
index c7ed370..97e8bdc 100644 (file)
@@ -180,6 +180,8 @@ var NODETYPE = {
CUSTOM : 60,
// @type int Setting = 70
SETTING : 70,
+    // @type int site administration = 71
// @type int User context = 80
USER : 80,
// @type int Container = 90
@@ -257,6 +259,26 @@ TREE.prototype = {
this.branches[branch.get('id')] = branch;
}
+            var siteadminbranch = new BRANCH({
+                tree: this,
+                overrides : {
+                    expandable : true,
+                    children : [],
+                    haschildren : true
+                }
+            }).wire();
+            // Remove link on site admin with JS to keep old UI.
+            }
+        }
Y.delegate('click', this.fire_branch_action, node.one('.block_tree'), '.tree_item.branch[data-expandable]', this);
@@ -586,7 +608,13 @@ BRANCH.prototype = {
instance : this.get('tree').get('instance')
};

-        Y.io(M.cfg.wwwroot+'/lib/ajax/getnavbranch.php', {
+        var ajaxfile = '/lib/ajax/getnavbranch.php';
+        if (this.get('type') === NODETYPE.SITEADMIN) {
+        }
+
+        Y.io(M.cfg.wwwroot + ajaxfile, {
method:'POST',
data:  build_querystring(params),
on: {
index 2da394d..c50e3a0 100644 (file)
@@ -36,6 +36,7 @@ require_capability('moodle/cohort:assign', \$context);

\$PAGE->set_context(\$context);
\$PAGE->set_url('/cohort/assign.php', array('id'=>\$id));

\$returnurl = new moodle_url('/cohort/index.php', array('contextid'=>\$cohort->contextid));

@@ -51,11 +52,8 @@ if (optional_param('cancel', false, PARAM_BOOL)) {
if (\$context->contextlevel == CONTEXT_COURSECAT) {
\$category = \$DB->get_record('course_categories', array('id'=>\$context->instanceid), '*', MUST_EXIST);
-    \$PAGE->set_pagelayout('report');
-
} else {
}

index 3a18ddb..a585f35 100644 (file)
@@ -62,15 +62,14 @@ if (!empty(\$cohort->component)) {
\$PAGE->set_context(\$context);
\$PAGE->set_url('/cohort/edit.php', array('contextid'=>\$context->id, 'id'=>\$cohort->id));
\$PAGE->set_context(\$context);

if (\$context->contextlevel == CONTEXT_COURSECAT) {
\$category = \$DB->get_record('course_categories', array('id'=>\$context->instanceid), '*', MUST_EXIST);
-    \$PAGE->set_pagelayout('report');

} else {
}

if (\$delete and \$cohort->id) {
index 3c31556..b0c30bd 100644 (file)
@@ -56,7 +56,7 @@ if (!\$manager) {
\$strcohorts = get_string('cohorts', 'cohort');

if (\$category) {
-    \$PAGE->set_pagelayout('report');
\$PAGE->set_context(\$context);
\$PAGE->set_url('/cohort/index.php', array('contextid'=>\$context->id));
\$PAGE->set_title(\$strcohorts);
diff --git a/completion/tests/behat/restrict_activity_by_date.feature b/completion/tests/behat/restrict_activity_by_date.feature
new file mode 100644 (file)
index 0000000..fe1a0f2
--- /dev/null
@@ -0,0 +1,68 @@
+@core @core_completion
+Feature: Restrict activity availability through date conditions
+  In order to control activity access through date condition
+  As a teacher
+  I need to set allow access dates to restrict activity access
+
+  Background:
+    Given the following "courses" exists:
+      | fullname | shortname | category |
+      | Course 1 | C1 | 0 |
+    And the following "users" exists:
+      | username | firstname | lastname | email |
+      | teacher1 | Teacher | Frist | teacher1@asd.com |
+      | student1 | Student | First | student1@asd.com |
+    And the following "course enrolments" exists:
+      | user | course | role |
+      | teacher1 | C1 | editingteacher |
+      | student1 | C1 | student |
+    And I log in as "admin"
+    And I set the following administration settings values:
+      | Enable conditional access | 1 |
+    And I log out
+
+  @javascript
+  Scenario: Show activity greyed-out to students when available from date is in future
+    Given I log in as "teacher1"
+    And I follow "Course 1"
+    And I turn editing mode on
+    And I add a "Assignment" to section "1"
+    And I fill the moodle form with:
+      | Assignment name | Test assignment 1 |
+      | Description | This assignment is restricted by date |
+      | assignsubmission_onlinetext_enabled | 1 |
+      | assignsubmission_file_enabled | 0 |
+      | id_availablefrom_day | 31 |
+      | id_availablefrom_month | 12 |
+      | id_availablefrom_year | 2050 |
+      | id_showavailability | 1 |
+    And I click on "id_availablefrom_enabled" "checkbox"
+    And I press "Save and return to course"
+    And I log out
+    When I log in as "student1"
+    And I follow "Course 1"
+    Then I should see "Available from 31 December 2050."
+    And "Test assignment 1" activity should be hidden
+    And I log out
+
+  @javascript
+  Scenario: Show activity hidden to students when available until date is in past
+    Given I log in as "teacher1"
+    And I follow "Course 1"
+    And I turn editing mode on
+    And I add a "Assignment" to section "2"
+    And I fill the moodle form with:
+      | Assignment name | Test assignment 2 |
+      | Description | This assignment is restricted by date |
+      | assignsubmission_onlinetext_enabled | 1 |
+      | assignsubmission_file_enabled | 0 |
+      | id_availableuntil_day | 1 |
+      | id_availableuntil_month | 2 |
+      | id_availableuntil_year | 2013 |
+      | id_showavailability | 0 |
+    And I click on "id_availableuntil_enabled" "checkbox"
+    And I press "Save and return to course"
+    And I log out
+    When I log in as "student1"
+    And I follow "Course 1"
+    Then I should not see "Test assignment 2"
new file mode 100644 (file)
index 0000000..e3de103
--- /dev/null
@@ -0,0 +1,63 @@
+@core @core_completion
+Feature: Restrict activity availability through grade conditions
+  In order to control activity access through grade condition
+  As a teacher
+  I need to set grade condition to restrict activity access
+
+  @javascript
+  Scenario: Show activity greyed-out to students when grade condition is not satisfied
+    Given the following "courses" exists:
+      | fullname | shortname | category |
+      | Course 1 | C1 | 0 |
+    And the following "users" exists:
+      | username | firstname | lastname | email |
+      | teacher1 | Teacher | Frist | teacher1@asd.com |
+      | student1 | Student | First | student1@asd.com |
+    And the following "course enrolments" exists:
+      | user | course | role |
+      | teacher1 | C1 | editingteacher |
+      | student1 | C1 | student |
+    And I log in as "admin"
+    And I set the following administration settings values:
+      | Enable conditional access | 1 |
+    And I log out
+    And I log in as "teacher1"
+    And I follow "Course 1"
+    And I turn editing mode on
+    And I add a "Assignment" to section "1" and I fill the form with:
+      | Assignment name | Grade assignment |
+      | Description | Grade this assignment to revoke restriction on restricted assignment |
+      | assignsubmission_onlinetext_enabled | 1 |
+      | assignsubmission_file_enabled | 0 |
+    And I add a "Page" to section "2" and I fill the form with:
+      | Name | Test page name |
+      | Description | Restricted page, till grades in Grade assignment is at least 20% |
+      | Page content | Test page contents |
+      | id_showavailability | 1 |
+    And I log out
+    When I log in as "student1"
+    And I follow "Course 1"
+    Then I should see "Not available until you achieve a required score in Grade assignment"
+    And "Test page name" activity should be hidden
+    And I follow "Grade assignment"
+    And I press "Add submission"
+    And I fill the moodle form with:
+      | Online text | I'm the student submission |
+    And I press "Save changes"
+    And I should see "Submitted for grading"
+    And I log out
+    And I log in as "teacher1"
+    And I follow "Course 1"
+    And I follow "Grade assignment"
+    And I follow "View/grade all submissions"
+    And I click on "Grade Student First" "link" in the "Student First" "table_row"
+    And I fill the moodle form with:
+      | Grade | 21 |
+    And I press "Save changes"
+    And I log out
+    And I log in as "student1"
+    And I follow "Course 1"
+    And "Test page name" activity should be visible
+    And I should not see "Not available until you achieve a required score in Grade assignment"
index 35b7f09..03505dc 100644 (file)
@@ -1,11 +1,10 @@
@core @core_completion
-Feature: Restrict sections availability through completion conditions
-  In order to control section's contents access through activities completion
+Feature: Restrict sections availability through completion or grade conditions
+  In order to control section's contents access through activities completion or grade condition
As a teacher
I need to restrict sections availability using different conditions

-  @javascript
-  Scenario: Show section greyed-out to students when completion conditions are not satisfied
+  Background:
Given the following "courses" exists:
| fullname | shortname | category |
| Course 1 | C1 | 0 |
@@ -22,7 +21,10 @@ Feature: Restrict sections availability through completion conditions
| Enable completion tracking | 1 |
| Enable conditional access | 1 |
And I log out
-    And I log in as "teacher1"
+
+  @javascript
+  Scenario: Show section greyed-out to student when completion condition is not satisfied
+    Given I log in as "teacher1"
And I follow "Course 1"
And I turn editing mode on
And I follow "Edit settings"
@@ -36,12 +38,10 @@ Feature: Restrict sections availability through completion conditions
| Name | Test page name |
| Description | Test page description |
| Page content | Test page contents |
-    When I click on "Edit summary" "link" in the "#section-2" "css_element"
-    And I fill the moodle form with:
+    When I edit the section "2" and I fill the form with:
| id_conditioncompletiongroup_0_conditionsourcecmid | Test label |
| id_conditioncompletiongroup_0_conditionrequiredcompletion | must be marked complete |
| Before section can be accessed | Show section greyed-out, with restriction information |
-    And I press "Save changes"
And I log out
And I log in as "student1"
And I follow "Course 1"
@@ -50,3 +50,47 @@ Feature: Restrict sections availability through completion conditions
And I press "Not completed: Test label. Select to mark as complete."
And I should see "Test page name"
And I should not see "Not available until the activity Test label is marked complete."
+
+  @javascript
+  Scenario: Show section greyed-out to student when grade condition is not satisfied
+    Given I log in as "teacher1"
+    And I follow "Course 1"
+    And I turn editing mode on
+    And I add a "Assignment" to section "1" and I fill the form with:
+      | Assignment name | Grade assignment |
+      | Description | Grade this assignment to revoke restriction on restricted assignment |
+      | assignsubmission_onlinetext_enabled | 1 |
+      | assignsubmission_file_enabled | 0 |
+    And I add a "Page" to section "2" and I fill the form with:
+      | Name | Test page name |
+      | Description | Restricted section page resource, till grades in Grade assignment is at least 20% |
+      | Page content | Test page contents |
+    And I edit the section "2" and I fill the form with:
+      | Before section can be accessed | 1 |
+    And I log out
+    When I log in as "student1"
+    And I follow "Course 1"
+    Then I should see "Not available until you achieve a required score in Grade assignment"
+    And "Test page name" activity should be hidden
+    And I follow "Grade assignment"
+    And I press "Add submission"
+    And I fill the moodle form with:
+      | Online text | I'm the student submission |
+    And I press "Save changes"
+    And I should see "Submitted for grading"
+    And I log out
+    And I log in as "teacher1"
+    And I follow "Course 1"
+    And I follow "Grade assignment"
+    And I follow "View/grade all submissions"
+    And I click on "Grade Student First" "link" in the "Student First" "table_row"
+    And I fill the moodle form with:
+      | Grade | 21 |
+    And I press "Save changes"
+    And I log out
+    And I log in as "student1"
+    And I follow "Course 1"
+    And "Test page name" activity should be visible
+    And I should not see "Not available until you achieve a required score in Grade assignment"
\ No newline at end of file
index c5bf4be..3050973 100644 (file)
//      \$CFG->session_handler_class = '\core\session\memcached';
//      \$CFG->session_memcached_save_path = '127.0.0.1:11211';
//      \$CFG->session_memcached_prefix = 'memc.sess.key.';
+//      \$CFG->session_memcached_acquire_lock_timeout = 120;
+//      \$CFG->session_memcached_lock_expire = 7200;       // Ignored if memcached extension <= 2.1.0
//
// Following setting allows you to alter how frequently is timemodified updated in sessions table.
//      \$CFG->session_update_timemodified_frequency = 20; // In seconds.
index 2f720f5..31d4817 100644 (file)
@@ -28,24 +28,26 @@ require_once(\$CFG->dirroot . '/course/lib.php');
\$id = required_param('id', PARAM_INT); // Course ID.
\$delete = optional_param('delete', '', PARAM_ALPHANUM); // Confirmation hash.

-\$PAGE->set_url('/course/delete.php', array('id' => \$id));
-\$PAGE->set_context(context_system::instance());
-
\$course = \$DB->get_record('course', array('id' => \$id), '*', MUST_EXIST);
\$coursecontext = context_course::instance(\$course->id);

-if ((int)\$SITE->id === (int)\$course->id || !can_delete_course(\$id)) {
+
+if (\$SITE->id == \$course->id || !can_delete_course(\$id)) {
// Can not delete frontpage or don't have permission to delete the course.
print_error('cannotdeletecourse');
}

+\$categorycontext = context_coursecat::instance(\$course->category);
+\$PAGE->set_url('/course/delete.php', array('id' => \$id));
+\$PAGE->set_context(\$categorycontext);
+
\$courseshortname = format_string(\$course->shortname, true, array('context' => \$coursecontext));
\$coursefullname = format_string(\$course->fullname, true, array('context' => \$coursecontext));
\$categoryurl = new moodle_url('/course/management.php', array('categoryid' => \$course->category));

-
// Check if we've got confirmation.
if (\$delete === md5(\$course->timemodified)) {
// We do - time to delete the course.
index 8126449..3fa6bb2 100644 (file)
@@ -599,6 +599,8 @@ class dndupload_ajax_processor {
* Create the coursemodule to hold the file/content that has been uploaded
*/
protected function create_course_module() {
+        global \$CFG;
+
if (!course_allowed_module(\$this->course, \$this->module->name)) {
throw new coding_exception("The module {\$this->module->name} is not allowed to be added to this course");
}
@@ -616,7 +618,7 @@ class dndupload_ajax_processor {
// Set the correct default for completion tracking.
\$this->cm->completion = COMPLETION_TRACKING_NONE;
\$completion = new completion_info(\$this->course);
-        if (\$completion->is_enabled()) {
+        if (\$completion->is_enabled() && \$CFG->completiondefault) {
if (plugin_supports('mod', \$this->cm->modulename, FEATURE_MODEDIT_DEFAULT_COMPLETION, true)) {
\$this->cm->completion = COMPLETION_TRACKING_MANUAL;
}
@@ -625,15 +627,7 @@ class dndupload_ajax_processor {
throw new coding_exception("Unable to create the course module");
}
-        // The following are used inside some few core functions, so may as well set them here.
\$this->cm->coursemodule = \$this->cm->id;
-        \$groupbuttons = (\$this->course->groupmode or (!\$this->course->groupmodeforce));
-        if (\$groupbuttons and plugin_supports('mod', \$this->module->name, FEATURE_GROUPS, 0)) {
-        } else {
-            \$this->cm->groupmode = false;
-        }
}

/**
@@ -700,8 +694,6 @@ class dndupload_ajax_processor {
throw new moodle_exception('errorcreatingactivity', 'moodle', '', \$this->module->name);
}
\$mod = \$info->get_cm(\$this->cm->id);
-        \$mod->groupmode = \$this->cm->groupmode;

// Trigger course module created event.
\$event = \core\event\course_module_created::create(array(
index f2793a2..b457920 100644 (file)
@@ -45,6 +45,7 @@ if (\$id) {
\$itemid = 0; // Initialise itemid, as all files in category description has item id 0.
\$title = \$strtitle;
\$fullname = \$coursecat->get_formatted_name();
+
} else {
\$parent = required_param('parent', PARAM_INT);
\$url->param('parent', \$parent);
@@ -54,6 +55,7 @@ if (\$id) {
} else {
\$context = context_system::instance();
}
+    navigation_node::override_active_url(new moodle_url('/course/editcategory.php', array('parent' => \$parent)));

\$category = new stdClass();
\$category->id = 0;
@@ -66,12 +68,6 @@ if (\$id) {

require_capability('moodle/category:manage', \$context);

-// Page "Add new category" (with "Top" as a parent) does not exist in navigation.
-// We pretend we are on course management page.
-if (\$id !== 0) {
-}
-
\$PAGE->set_context(\$context);
\$PAGE->set_url(\$url);
index 229b29c..c296ec9 100644 (file)
@@ -533,7 +533,7 @@ abstract class format_section_renderer_base extends plugin_renderer_base {
\$o.= html_writer::tag('div', '', array('class' => 'left side'));
\$o.= html_writer::tag('div', '', array('class' => 'right side'));
\$o.= html_writer::start_tag('div', array('class' => 'content'));
+        \$o.= \$this->output->heading(get_string('orphanedactivitiesinsectionno', '', \$sectionno), 3, 'sectionname');
return \$o;
}

index 7463b11..b787853 100644 (file)
@@ -48,7 +48,6 @@ if (\$issearching) {
}

\$url = new moodle_url('/course/management.php');
\$systemcontext = \$context = context_system::instance();
if (\$courseid) {
\$record = get_course(\$courseid);
@@ -56,13 +55,18 @@ if (\$courseid) {
\$category = coursecat::get(\$course->category);
\$categoryid = \$category->id;
\$context = context_coursecat::instance(\$category->id);
+    \$url->param('categoryid', \$categoryid);
\$url->param('courseid', \$course->id);
+
} else if (\$categoryid) {
\$courseid = null;
\$course = null;
\$category = coursecat::get(\$categoryid);
\$context = context_coursecat::instance(\$category->id);
\$url->param('categoryid', \$category->id);
+
} else {
\$course = null;
\$courseid = null;
@@ -72,6 +76,7 @@ if (\$courseid) {
\$viewmode = 'categories';
}
\$context = \$systemcontext;
}

if (\$page !== 0) {
index bf088d8..3e6ef68 100644 (file)
@@ -126,6 +126,9 @@ if (!empty(\$add)) {
\$url->param('update', \$update);
\$PAGE->set_url(\$url);

+    // Select the "Edit settings" from navigation.
+
// Check the course module exists.
\$cm = get_coursemodule_from_id('', \$update, 0, false, MUST_EXIST);

index 0517f39..f831b23 100644 (file)
@@ -37,6 +37,7 @@ if (!\$course = \$DB->get_record('course', array('id'=>\$id))) {
}

\$PAGE->set_url('/course/reset.php', array('id'=>\$id));

require_capability('moodle/course:reset', context_course::instance(\$course->id));
index e572403..2a80d75 100644 (file)
@@ -85,13 +85,14 @@ class behat_course extends behat_base {
* @return Given[]
*/
public function i_go_to_the_courses_management_page() {
-
-        return array(
-            new Given('I am on homepage'),
-            new Given('I expand "' . get_string('administrationsite') . '" node'),
-            new Given('I expand "' . get_string('courses', 'admin') . '" node'),
-            new Given('I follow "' . get_string('coursemgmt', 'admin') . '"'),
-        );
+        if (\$this->running_javascript()) {
+            \$scenario = array(new Given('I expand "' . get_string('administrationsite') . '" node'));
+        } else {
+            \$scenario = array(new Given('I follow "' . get_string('administrationsite') . '"'));
+        }
+        \$scenario[] = new Given('I expand "' . get_string('courses', 'admin') . '" node');
+        \$scenario[] = new Given('I follow "' . get_string('coursemgmt', 'admin') . '"');
+        return \$scenario;
}

/**
@@ -226,6 +227,33 @@ class behat_course extends behat_base {
}
}

+    /**
+     * Go to editing section page for specified section number. You need to be in the course page and on editing mode.
+     *
+     * @Given /^I edit the section "(?P<section_number>\d+)"\$/
+     * @param int \$sectionnumber
+     */
+    public function i_edit_the_section(\$sectionnumber) {
+        return new Given('I click on "' . get_string('editsummary') . '" "link" in the "#section-' . \$sectionnumber . '" "css_element"');
+    }
+
+    /**
+     * Edit specified section and fill the form data with the specified field/value pairs.
+     *
+     * @When /^I edit the section "(?P<section_number>\d+)" and I fill the form with:\$/
+     * @param int \$sectionnumber The section number
+     * @param TableNode \$data The activity field/value data
+     * @return Given[]
+     */
+    public function i_edit_the_section_and_i_fill_the_form_with(\$sectionnumber, TableNode \$data) {
+
+        return array(
+            new Given('I edit the section "' . \$sectionnumber . '"'),
+            new Given('I fill the moodle form with:', \$data),
+            new Given('I press "' . get_string('savechanges') . '"')
+        );
+    }
+
/**
* Checks if the specified course section hightlighting is turned on. You need to be in the course page on editing mode.
*
index b28522e..1935ec7 100644 (file)
@@ -1534,6 +1534,10 @@ class core_course_courselib_testcase extends advanced_testcase {
\$this->assertEquals(\$coursecontext->id, \$event->contextid);
\$this->assertEquals(\$course, \$event->get_record_snapshot('course', \$course->id));
\$this->assertEquals('course_deleted', \$event->get_legacy_eventname());
+        \$eventdata = \$event->get_data();
+        \$this->assertSame(\$course->idnumber, \$eventdata['other']['idnumber']);
+        \$this->assertSame(\$course->fullname, \$eventdata['other']['fullname']);
+        \$this->assertSame(\$course->shortname, \$eventdata['other']['shortname']);
// The legacy data also passed the context in the course object.
\$course->context = \$coursecontext;
\$this->assertEventLegacyData(\$course, \$event);
index 73839e1..cd37afc 100644 (file)
@@ -58,7 +58,7 @@ \$personalcontext = context_user::instance(\$user->id);
\$PAGE->set_url('/course/user.php', array('id'=>\$id, 'user'=>\$user->id, 'mode'=>\$mode));

+\$PAGE->set_pagelayout('report');
if (has_capability('moodle/user:viewuseractivitiesreport', \$personalcontext) and !is_enrolled(\$coursecontext)) {
// do not require parents to be enrolled in courses ;-)
\$PAGE->set_course(\$course);
index f2e8a6d..42cb947 100644 (file)
@@ -26,7 +26,7 @@

require('../config.php');

-\$contextid  = optional_param('contextid', SYSCONTEXTID, PARAM_INT);
+\$contextid  = optional_param('contextid', 0, PARAM_INT);
\$filepath   = optional_param('filepath', '', PARAM_PATH);
\$filename   = optional_param('filename', '', PARAM_FILE);
// hard-coded to course legacy area
@@ -34,7 +34,12 @@ \$component = 'course';
\$filearea  = 'legacy';
\$itemid    = 0;

+if (empty(\$contextid)) {
+    \$contextid = context_course::instance(SITEID)->id;
+}
+
\$PAGE->set_url('/files/index.php', array('contextid'=>\$contextid, 'filepath'=>\$filepath, 'filename'=>\$filename));

if (\$filepath === '') {
\$filepath = null;
@@ -201,14 +201,14 @@ class core_files_renderer extends plugin_renderer_base {
<div class="fp-navbar">
<div class="filemanager-toolbar">
<div class="fp-toolbar">
-                <div class="{!}fp-btn-mkdir"><a role="button" href="#"><img src="'.\$this->pix_url('a/create_folder').'" /> '.\$strmakedir.'</a></div>
+                <div class="{!}fp-btn-mkdir"><a role="button" href="#"><img src="'.\$this->pix_url('a/create_folder').'" alt="'.\$strmakedir.'" /></a></div>
</div>
<div class="{!}fp-viewbar">
-                <a title="'. get_string('displayicons', 'repository') .'" class="{!}fp-vb-icons" href="#"></a>
-                <a title="'. get_string('displaydetails', 'repository') .'" class="{!}fp-vb-details" href="#"></a>
-                <a title="'. get_string('displaytree', 'repository') .'" class="{!}fp-vb-tree" href="#"></a>
+                <a title="'. get_string('displayicons', 'repository') .'" class="{!}fp-vb-icons" href="#"><img alt="" src="'. \$this->pix_url('fp/view_icon_active', 'theme') .'" /></a>
+                <a title="'. get_string('displaydetails', 'repository') .'" class="{!}fp-vb-details" href="#"><img alt="" src="'. \$this->pix_url('fp/view_list_active', 'theme') .'" /></a>
+                <a title="'. get_string('displaytree', 'repository') .'" class="{!}fp-vb-tree" href="#"><img alt="" src="'. \$this->pix_url('fp/view_tree_active', 'theme') .'" /></a>
</div>
</div>
<div class="fp-pathbar">
@@ -535,15 +535,15 @@ class core_files_renderer extends plugin_renderer_base {
<div class="{!}fp-tb-back"><a href="#">'.get_string('back', 'repository').'</a></div>
<div class="{!}fp-tb-search"><form></form></div>
<div class="{!}fp-tb-refresh"><a href="#"><img alt="'. get_string('refresh', 'repository') .'"  src="'.\$this->pix_url('a/refresh').'" /></a></div>
-                    <div class="{!}fp-tb-logout"><img alt="'. get_string('logout', 'repository') .'" src="'.\$this->pix_url('a/logout').'" /><a href="#"></a></div>
-                    <div class="{!}fp-tb-manage"><a href="#"><img alt="'. get_string('settings', 'repository') .'" src="'.\$this->pix_url('a/setting').'" /> '.get_string('manageurl', 'repository').'</a></div>
-                    <div class="{!}fp-tb-help"><a href="#"><img alt="'. get_string('help', 'repository') .'" src="'.\$this->pix_url('a/help').'" /> '.get_string('help').'</a></div>
+                    <div class="{!}fp-tb-logout"><a href="#"><img alt="'. get_string('logout', 'repository') .'" src="'.\$this->pix_url('a/logout').'" /></a></div>
+                    <div class="{!}fp-tb-manage"><a href="#"><img alt="'. get_string('settings', 'repository') .'" src="'.\$this->pix_url('a/setting').'" /></a></div>
+                    <div class="{!}fp-tb-help"><a href="#"><img alt="'. get_string('help', 'repository') .'" src="'.\$this->pix_url('a/help').'" /></a></div>
<div class="{!}fp-tb-message"></div>
</div>
<div class="{!}fp-viewbar">
-                    <a title="'. get_string('displayicons', 'repository') .'" class="{!}fp-vb-icons" href="#"></a>
-                    <a title="'. get_string('displaydetails', 'repository') .'" class="{!}fp-vb-details" href="#"></a>
-                    <a title="'. get_string('displaytree', 'repository') .'" class="{!}fp-vb-tree" href="#"></a>
+                    <a title="'. get_string('displayicons', 'repository') .'" class="{!}fp-vb-icons" href="#"><img alt="" src="'. \$this->pix_url('fp/view_icon_active', 'theme') .'" /></a>
+                    <a title="'. get_string('displaydetails', 'repository') .'" class="{!}fp-vb-details" href="#"><img alt="" src="'. \$this->pix_url('fp/view_list_active', 'theme') .'" /></a>
+                    <a title="'. get_string('displaytree', 'repository') .'" class="{!}fp-vb-tree" href="#"><img alt="" src="'. \$this->pix_url('fp/view_tree_active', 'theme') .'" /></a>
</div>
<div class="fp-clear-left"></div>
</div>
index 161b816..314db1e 100644 (file)
@@ -18,8 +18,8 @@ Feature: Course files
Then I should see "Legacy course files"
And I follow "Legacy course files"
And I press "Edit legacy course files"
-    And I should see "Add..."
-    And I should see "Create folder"
+    And "Create folder" "link" should be visible

@javascript
@@ -35,5 +35,5 @@ Feature: Course files
Then I should see "Legacy course files"
And I follow "Legacy course files"
And I press "Edit legacy course files"
-    And I should not see "Add..."
-    And I should not see "Create folder"
+    And "Create folder" "link" should not be visible
index 550b0f0..f453c97 100644 (file)
@@ -57,7 +57,7 @@ \$isfrontpage = (\$context->contextlevel == CONTEXT_COURSE && \$context->instanceid
\$contextname = \$context->get_context_name();

if (\$context->contextlevel == CONTEXT_COURSECAT) {
} else if (\$context->contextlevel == CONTEXT_COURSE) {
} else if (\$context->contextlevel == CONTEXT_MODULE) {
@@ -119,16 +119,11 @@ if (\$forfilter) {
}
\$straction = get_string('filters', 'admin'); // Used by tabs.php

-/// Print the header and tabs
-if (\$isfrontpage) {
-} else {
-    \$PAGE->set_cacheable(false);
-    \$PAGE->set_title(\$title);
-}
+// Print the header and tabs.
+\$PAGE->set_cacheable(false);
+\$PAGE->set_title(\$title);

index f156fa9..18a34ff 100644 (file)
@@ -262,6 +262,7 @@ \$string['skipmodifprevhelp'] = 'Choose whether or not to skip courses that have
\$string['title'] = 'Title';
\$string['totalcategorysearchresults'] = 'Total categories: {\$a}';
\$string['totalcoursesearchresults'] = 'Total courses: {\$a}';
+\$string['unnamedsection'] = 'Unnamed section';
\$string['userinfo'] = 'Userinfo';
\$string['module'] = 'Module';
\$string['morecoursesearchresults'] = 'More than {\$a} courses found, showing first {\$a} results';
index f8dcbc1..684ffbd 100644 (file)
@@ -1319,7 +1319,7 @@ \$string['optional'] = 'optional';
\$string['options'] = 'options';
\$string['order'] = 'Order';
\$string['originalpath'] = 'Original path';
-\$string['orphanedactivities'] = 'Orphaned activities';
+\$string['orphanedactivitiesinsectionno'] = 'Orphaned activities (section {\$a})';
\$string['other'] = 'Other';
\$string['outline'] = 'Outline';
\$string['outlinereport'] = 'Outline report';
index 7d7bb69..45f07b4 100644 (file)
@@ -1528,7 +1528,6 @@ function delete_role(\$roleid) {
'objectid' => \$roleid,
'other' =>
array(
-                    'name' => \$role->name,
'shortname' => \$role->shortname,
'description' => \$role->description,
'archetype' => \$role->archetype
index 2d3c61f..b300687 100644 (file)
@@ -6266,6 +6266,8 @@ function admin_externalpage_setup(\$section, \$extrabutton = '', array \$extraurlpa
die;
}

+
// \$PAGE->set_extra_button(\$extrabutton); TODO

if (!\$actualurl) {
new file mode 100644 (file)
index 0000000..a57959b
--- /dev/null
@@ -0,0 +1,52 @@
+<?php
+
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle 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 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle 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 Moodle.  If not, see <http://www.gnu.org/licenses/>.
+
+/**
+ * This file is used to deliver a branch from the site administration
+ * in XML format back to a page from an AJAX call
+ *
+ * @since 2.6
+ * @package core
+ * @copyright 2013 Rajesh Taneja <rajesh@moodle.com>
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+define('AJAX_SCRIPT', true);
+require_once(dirname(__FILE__) . '/../../config.php');
+
+// This should be accessed by only valid logged in user.
+if (!isloggedin() or isguestuser()) {
+    die('Invalid access.');
+}
+
+// This identifies the type of the branch we want to get. Make sure it's SITE_ADMIN.
+\$branchtype = required_param('type', PARAM_INT);
+    die('Wrong node type passed.');
+}
+
+\$PAGE->set_context(context_system::instance());
+
+
+// Convert and output the branch as XML.
+echo \$converter->convert(\$branch);
index b77219a..6e42b60 100644 (file)
@@ -60,7 +60,7 @@ class course_completed extends base {
* @return \moodle_url
*/
public function get_url() {
-        return new moodle_url('/report/completion/index.php', array('course' => \$this->courseid));
+        return new \moodle_url('/report/completion/index.php', array('course' => \$this->courseid));
}

/**
index 1637054..36a3d80 100644 (file)
@@ -67,7 +67,7 @@ class course_completion_updated extends base {
* @return \moodle_url
*/
public function get_url() {
-        return new moodle_url('/course/completion.php', array('id' => \$this->courseid));
+        return new \moodle_url('/course/completion.php', array('id' => \$this->courseid));
}

/**
index db17175..0f704a7 100644 (file)
@@ -71,7 +71,7 @@ class course_deleted extends base {
protected function get_legacy_eventdata() {
\$course = \$this->get_record_snapshot('course', \$this->objectid);
\$course->context = \$this->context;
-
+        \$course->timemodified = \$this->data['timecreated'];
return \$course;
}

index 72c0276..7436e83 100644 (file)
@@ -60,7 +60,7 @@ class course_module_completion_updated extends base {
* @return \moodle_url
*/
public function get_url() {
-        return new moodle_url('/report/completion/index.php', array('course' => \$this->courseid));
+        return new \moodle_url('/report/completion/index.php', array('course' => \$this->courseid));
}

/**
index fc9e9a8..5213900 100644 (file)
@@ -56,7 +56,7 @@ class role_assigned extends base {
* @return \moodle_url
*/
public function get_url() {
-        return new moodle_url('/admin/roles/assign.php', array('contextid' => \$this->contextid, 'roleid' => \$this->objectid));
+        return new \moodle_url('/admin/roles/assign.php', array('contextid' => \$this->contextid, 'roleid' => \$this->objectid));
}

/**
index 035e42a..2e5a986 100644 (file)
@@ -56,7 +56,7 @@ class role_unassigned extends base {
* @return \moodle_url
*/
public function get_url() {
-        return new moodle_url('/admin/roles/assign.php', array('contextid' => \$this->contextid, 'roleid' => \$this->objectid));
+        return new \moodle_url('/admin/roles/assign.php', array('contextid' => \$this->contextid, 'roleid' => \$this->objectid));
}

/**
index 545d691..9457519 100644 (file)
@@ -58,7 +58,7 @@ class user_deleted extends base {
* @return string
*/
public function get_description() {
-        \$user = (object)\$this->other['user'];
+        \$user = \$this->get_record_snapshot('user', \$this->data['objectid']);
return 'User profile deleted for user '.\$user->firstname.' '.\$user->lastname.' id ('.\$user->id.')';
}

@@ -77,7 +77,13 @@ class user_deleted extends base {
* @return \stdClass user data.
*/
protected function get_legacy_eventdata() {
-        return (object)\$this->other['user'];
+        \$user = \$this->get_record_snapshot('user', \$this->data['objectid']);
+        \$user->deleted = 0;
+        \$user->email = \$this->data['other']['email'];
+        \$user->idnumber = \$this->data['other']['idnumber'];
+        \$user->picture = \$this->data['other']['picture'];
+        return \$user;
}

/**
@@ -86,8 +92,8 @@ class user_deleted extends base {
* @return array
*/
protected function get_legacy_logdata() {
-        \$user = (object)\$this->other['user'];
-        return array(SITEID, 'user', 'delete', "view.php?id=\$user->id", \$user->firstname.' '.\$user->lastname);
+        \$user = \$this->get_record_snapshot('user', \$this->data['objectid']);
+        return array(SITEID, 'user', 'delete', "view.php?id=".\$user->id, \$user->firstname.' '.\$user->lastname);
}

/**
@@ -97,9 +103,29 @@ class user_deleted extends base {
* @return void
*/
protected function validate_data() {
-        parent::validate_data();
-        if (!isset(\$this->other['user'])) {
-            throw new \coding_exception('user must be set in \$other.');
+        global \$CFG;
+
+        if (\$CFG->debugdeveloper) {
+            parent::validate_data();
+                throw new \coding_exception('username must be set in \$other.');
+            }
+
+            if (!isset(\$this->other['email'])) {
+                throw new \coding_exception('email must be set in \$other.');
+            }
+
+            if (!isset(\$this->other['idnumber'])) {
+                throw new \coding_exception('idnumber must be set in \$other.');
+            }
+
+            if (!isset(\$this->other['picture'])) {
+                throw new \coding_exception('picture must be set in \$other.');
+            }
+
+            if (!isset(\$this->other['mnethostid'])) {
+                throw new \coding_exception('mnethostid must be set in \$other.');
+            }
}
}
}
index d45ca6d..064ccf5 100644 (file)
@@ -40,7 +40,7 @@ class user_enrolment_created extends base {
protected function init() {
\$this->data['objecttable'] = 'user_enrolments';
\$this->data['crud'] = 'c';
-        \$this->data['level'] = self::LEVEL_TEACHING;
+        \$this->data['level'] = self::LEVEL_OTHER;
}

/**
index 82e523f..8992347 100644 (file)
@@ -40,7 +40,7 @@ class user_enrolment_deleted extends base {
protected function init() {
\$this->data['objecttable'] = 'user_enrolments';
\$this->data['crud'] = 'd';
-        \$this->data['level'] = self::LEVEL_TEACHING;
+        \$this->data['level'] = self::LEVEL_OTHER;
}

/**
index 786f519..8e53236 100644 (file)
@@ -40,7 +40,7 @@ class user_enrolment_updated extends base {
protected function init() {
\$this->data['objecttable'] = 'user_enrolments';
\$this->data['crud'] = 'u';
-        \$this->data['level'] = self::LEVEL_TEACHING;
+        \$this->data['level'] = self::LEVEL_OTHER;
}

/**
index a656175..995784a 100644 (file)
@@ -34,6 +34,14 @@ defined('MOODLE_INTERNAL') || die();
* @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
abstract class handler {
+    /**
+     * Start the session.
+     * @return bool success
+     */
+    public function start() {
+        return session_start();
+    }
+
/**
* Init session handler.
*/
index 2b1e7f0..c5e764c 100644 (file)
@@ -74,7 +74,7 @@ class manager {

-            session_start();
+            self::\$handler->start();

self::initialise_user_session(\$newsid);
self::check_security();
index 7281537..4e07f3c 100644 (file)
@@ -40,6 +40,13 @@ class memcached extends handler {
protected \$servers;
/** @var string \$prefix session key prefix  */
protected \$prefix;
+    /** @var int \$acquiretimeout how long to wait for session lock */
+    protected \$acquiretimeout = 120;
+    /**
+     * @var int \$lockexpire how long to wait before expiring the lock so that other requests
+     * may continue execution, ignored if memcached <= 2.1.0.
+     */
+    protected \$lockexpire = 7200;

/**
* Create new instance of handler.
@@ -64,6 +71,32 @@ class memcached extends handler {
} else {
\$this->prefix = \$CFG->session_memcached_prefix;
}
+
+        if (!empty(\$CFG->session_memcached_acquire_lock_timeout)) {
+            \$this->acquiretimeout = (int)\$CFG->session_memcached_acquire_lock_timeout;
+        }
+
+        if (!empty(\$CFG->session_memcached_lock_expire)) {
+            \$this->lockexpire = (int)\$CFG->session_memcached_lock_expire;
+        }
+    }
+
+    /**
+     * Start the session.
+     * @return bool success
+     */
+    public function start() {
+        // NOTE: memcached <= 2.1.0 expires session locks automatically after max_execution_time,
+        //       this leads to major difference compared to other session drivers that timeout
+        //       and stop the second request execution instead.
+
+        \$default = ini_get('max_execution_time');
+        set_time_limit(\$this->acquiretimeout);
+
+        \$result = parent::start();
+
+        set_time_limit(\$default);
+        return \$result;
}

/**
@@ -81,11 +114,14 @@ class memcached extends handler {
throw new exception('sessionhandlerproblem', 'error', '', null, '\$CFG->session_memcached_save_path must be specified in config.php');
}

-        // NOTE: we cannot set any lock acquiring timeout here - bad luck.
ini_set('session.save_handler', 'memcached');
ini_set('session.save_path', \$this->savepath);
ini_set('memcached.sess_prefix', \$this->prefix);
ini_set('memcached.sess_locking', '1'); // Locking is required!
+
+        // Try to configure lock and expire timeouts - ignored if memcached <=2.1.0.
+        ini_set('memcached.sess_lock_max_wait', \$this->acquiretimeout);
+        ini_set('memcached.sess_lock_expire', \$this->lockexpire);
}

/**
index 971d138..3782b5c 100644 (file)
@@ -475,12 +475,13 @@ class core_useragent {
}

/**
-     * Checks the user agent is IE and that the version is equal to or greater than that specified.
+     * Checks the user agent is IE and returns its main properties:
+     * - browser version;
+     * - whether running in compatibility view.
*
-     * @param string|int \$version A version to check for, returns true if its equal to or greater than that specified.
-     * @return bool
+     * @return bool|array False if not IE, otherwise an associative array of properties.
*/
-    public static function check_ie_version(\$version = null) {
+    public static function check_ie_properties() {
// Internet Explorer.
\$useragent = self::get_user_agent_string();
if (\$useragent === false) {
@@ -490,25 +491,71 @@ class core_useragent {
// Reject Opera.
return false;
}
-        // In case of IE we have to deal with BC of the version parameter.
-        if (is_null(\$version)) {
-            \$version = 5.5; // Anything older is not considered a browser at all!
-        }
-        // IE uses simple versions, let's cast it to float to simplify the logic here.
-        \$version = round(\$version, 1);
// See: http://www.useragentstring.com/pages/Internet%20Explorer/.
if (preg_match("/MSIE ([0-9\.]+)/", \$useragent, \$match)) {
\$browser = \$match[1];
+        // See: http://msdn.microsoft.com/en-us/library/ie/bg182625%28v=vs.85%29.aspx for IE11+ useragent details.
+        } else if (preg_match("/Trident\/[0-9\.]+/", \$useragent) && preg_match("/rv:([0-9\.]+)/", \$useragent, \$match)) {
+            \$browser = \$match[1];
} else {
return false;
}
+        \$compat_view = false;
// IE8 and later versions may pretend to be IE7 for intranet sites, use Trident version instead,
// the Trident should always describe the capabilities of IE in any emulation mode.
if (\$browser === '7.0' and preg_match("/Trident\/([0-9\.]+)/", \$useragent, \$match)) {
+            \$compat_view = true;
\$browser = \$match[1] + 4; // NOTE: Hopefully this will work also for future IE versions.
}
\$browser = round(\$browser, 1);
-        return (\$browser >= \$version);
+        return array(
+            'version'    => \$browser,
+            'compatview' => \$compat_view
+        );
+    }
+
+    /**
+     * Checks the user agent is IE and that the version is equal to or greater than that specified.
+     *
+     * @param string|int \$version A version to check for, returns true if its equal to or greater than that specified.
+     * @return bool
+     */
+    public static function check_ie_version(\$version = null) {
+        // Internet Explorer.
+        \$properties = self::check_ie_properties();
+        if (!is_array(\$properties)) {
+            return false;
+        }
+        // In case of IE we have to deal with BC of the version parameter.
+        if (is_null(\$version)) {
+            \$version = 5.5; // Anything older is not considered a browser at all!
+        }
+        // IE uses simple versions, let's cast it to float to simplify the logic here.
+        \$version = round(\$version, 1);
+        return (\$properties['version'] >= \$version);
+    }
+
+    /**
+     * Checks the user agent is IE and that IE is running under Compatibility View setting.
+     *
+     * @return bool true if internet explorer runs in Compatibility View mode.
+     */
+    public static function check_ie_compatibility_view() {
+        // IE User Agent string when in Compatibility View:
+        // - IE  8: "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; ...)".
+        // - IE  9: "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; ...)".
+        // - IE 10: "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/6.0; ...)".
+        // - IE 11: "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.3; Trident/7.0; ...)".
+        // Refs:
+        // - http://blogs.msdn.com/b/ie/archive/2009/01/09/the-internet-explorer-8-user-agent-string-updated-edition.aspx.
+        // - http://blogs.msdn.com/b/ie/archive/2010/03/23/introducing-ie9-s-user-agent-string.aspx.
+        // - http://blogs.msdn.com/b/ie/archive/2011/04/15/the-ie10-user-agent-string.aspx.
+        // - http://msdn.microsoft.com/en-us/library/ie/hh869301%28v=vs.85%29.aspx.
+        \$properties = self::check_ie_properties();
+        if (!is_array(\$properties)) {
+            return false;
+        }
+        return \$properties['compatview'];
}

/**
@@ -829,4 +876,27 @@ class core_useragent {
}
return \$instance->supportssvg;
}
+
+    /**
+     * Returns true if the user agent supports the MIME media type for JSON text, as defined in RFC 4627.
+     *
+     * @return bool
+     */
+    public static function supports_json_contenttype() {
+        // Modern browsers other than IE correctly supports 'application/json' media type.
+        if (!self::is_ie()) {
+            return true;
+        }
+
+        // IE8+ supports 'application/json' media type, when NOT in Compatibility View mode.
+        // Refs:
+        // - http://blogs.msdn.com/b/ie/archive/2008/09/10/native-json-in-ie8.aspx;
+        // - MDL-39810: issues when using 'text/plain' in Compatibility View for the body of an HTTP POST response.
+        if (self::check_ie_version(8) && !self::check_ie_compatibility_view()) {
+            return true;
+        }
+
+        // This browser does not support json.
+        return false;
+    }
}
index 99e5f32..d3ef19f 100644 (file)
@@ -42,9 +42,10 @@ \$handlers = array(
*       (it is just abusing cron to do very time consuming things which is wrong any way)
*
* TODO: this has to be moved into separate queueing framework....
+ * TODO: MDL-25508, MDL-41541
*/
'portfolio_send' => array (
-        'handlerfile'      => '/lib/portfolio.php',
+        'handlerfile'      => '/lib/portfoliolib.php',
'handlerfunction'  => 'portfolio_handle_event',    // argument to call_user_func(), could be an array
'schedule'         => 'cron',
'internal'         => 0,
index 2bf05c5..edf21a9 100644 (file)
@@ -2739,5 +2739,40 @@ function xmldb_main_upgrade(\$oldversion) {
}

+    if (\$oldversion < 2013102500.01) {
+        // Find all fileareas that have missing root folder entry and add the root folder entry.
+        if (empty(\$CFG->filesrootrecordsfixed)) {
+            \$sql = "SELECT distinct f1.contextid, f1.component, f1.filearea, f1.itemid
+                FROM {files} f1 left JOIN {files} f2
+                    ON f1.contextid = f2.contextid
+                    AND f1.component = f2.component
+                    AND f1.filearea = f2.filearea
+                    AND f1.itemid = f2.itemid
+                    AND f2.filename = '.'
+                    AND f2.filepath = '/'
+                WHERE (f1.component <> 'user' or f1.filearea <> 'draft')
+                and f2.id is null";
+            \$rs = \$DB->get_recordset_sql(\$sql);
+            \$defaults = array('filepath' => '/',
+                            'filename' => '.',
+                            'userid' => \$USER->id,
+                            'filesize' => 0,
+                            'timecreated' => time(),
+                            'timemodified' => time(),
+                            'contenthash' => sha1(''));
+            foreach (\$rs as \$r) {
+                \$pathhash = sha1("/\$r->contextid/\$r->component/\$r->filearea/\$r->itemid".'/.');
+                \$DB->insert_record('files', (array)\$r + \$defaults +
+                        array('pathnamehash' => \$pathhash));
+            }
+            \$rs->close();
+            // To skip running the same script on the upgrade to the next major release.
+            set_config('filesrootrecordsfixed', 1);
+        }
+
+        // Main savepoint reached.
+    }
+
return true;
}
index e8a5aae..156d39c 100644 (file)
@@ -373,7 +373,6 @@ abstract class moodle_database {
\$this->database_manager = null;
}
\$this->tables  = null;
-        \$this->metacache = null;
}

/**
@@ -962,26 +961,11 @@ abstract class moodle_database {
*/
public function reset_caches() {
\$this->tables = null;
-        \$this->metacache = null;
// Purge MUC as well
\$identifiers = array('dbfamily' => \$this->get_dbfamily(), 'settings' => \$this->get_settings_hash());
cache_helper::purge_by_definition('core', 'databasemeta', \$identifiers);
}

-    /**
-     * Call before using \$this->metacache.
-     *
-     * Note: this is necessary because we want to write to database in shutdown handler
-     *       and it needs to use the caches, but MUC would be already disposed.
-     */
-    protected function init_caches() {
-        if (\$this->metacache) {
-            return;
-        }
-        \$properties = array('dbfamily' => \$this->get_dbfamily(), 'settings' => \$this->get_settings_hash());
-        \$this->metacache = cache::make('core', 'databasemeta', \$properties);
-    }
-
/**
* Returns the sql generator used for db manipulation.
* Used mostly in upgrade.php scripts.
@@ -398,8 +398,9 @@ class mssql_native_moodle_database extends moodle_database {
public function get_columns(\$table, \$usecache=true) {

if (\$usecache) {
-            \$this->init_caches();
-            if (\$data = \$this->metacache->get(\$table)) {
+            \$properties = array('dbfamily' => \$this->get_dbfamily(), 'settings' => \$this->get_settings_hash());
+            \$cache = cache::make('core', 'databasemeta', \$properties);
+            if (\$data = \$cache->get(\$table)) {
return \$data;
}
}
@@ -495,7 +496,7 @@ class mssql_native_moodle_database extends moodle_database {
\$this->free_result(\$result);

if (\$usecache) {
-            \$result = \$this->metacache->set(\$table, \$structure);
+            \$cache->set(\$table, \$structure);
}

return \$structure;
index f80c479..5196484 100644 (file)
@@ -511,8 +511,9 @@ class mysqli_native_moodle_database extends moodle_database {
public function get_columns(\$table, \$usecache=true) {

if (\$usecache) {
-            \$this->init_caches();
-            if (\$data = \$this->metacache->get(\$table)) {
+            \$properties = array('dbfamily' => \$this->get_dbfamily(), 'settings' => \$this->get_settings_hash());
+            \$cache = cache::make('core', 'databasemeta', \$properties);
+            if (\$data = \$cache->get(\$table)) {
return \$data;
}
}
@@ -618,7 +619,7 @@ class mysqli_native_moodle_database extends moodle_database {
}

if (\$usecache) {
-            \$result = \$this->metacache->set(\$table, \$structure);
+            \$cache->set(\$table, \$structure);
}

return \$structure;
index 5f412ef..95985f9 100644 (file)
@@ -470,8 +470,9 @@ class oci_native_moodle_database extends moodle_database {
public function get_columns(\$table, \$usecache=true) {

if (\$usecache) {
-            \$this->init_caches();
-            if (\$data = \$this->metacache->get(\$table)) {
+            \$properties = array('dbfamily' => \$this->get_dbfamily(), 'settings' => \$this->get_settings_hash());
+            \$cache = cache::make('core', 'databasemeta', \$properties);
+            if (\$data = \$cache->get(\$table)) {
return \$data;
}
}
@@ -663,7 +664,7 @@ class oci_native_moodle_database extends moodle_database {
}

if (\$usecache) {
-            \$result = \$this->metacache->set(\$table, \$structure);
+            \$cache->set(\$table, \$structure);
}

return \$structure;
index 3ae868d..3754d9b 100644 (file)
@@ -385,8 +385,9 @@ class pgsql_native_moodle_database extends moodle_database {
*/
public function get_columns(\$table, \$usecache=true) {
if (\$usecache) {
-            \$this->init_caches();
-            if (\$data = \$this->metacache->get(\$table)) {
+            \$properties = array('dbfamily' => \$this->get_dbfamily(), 'settings' => \$this->get_settings_hash());
+            \$cache = cache::make('core', 'databasemeta', \$properties);
+            if (\$data = \$cache->get(\$table)) {
return \$data;
}
}
@@ -569,7 +570,7 @@ class pgsql_native_moodle_database extends moodle_database {
pg_free_result(\$result);

if (\$usecache) {
-            \$result = \$this->metacache->set(\$table, \$structure);
+            \$cache->set(\$table, \$structure);
}

return \$structure;
index c711197..7828eb7 100644 (file)
@@ -201,8 +201,9 @@ class sqlite3_pdo_moodle_database extends pdo_moodle_database {
public function get_columns(\$table, \$usecache=true) {

if (\$usecache) {
-            \$this->init_caches();
-            if (\$data = \$this->metacache->get(\$table)) {
+            \$properties = array('dbfamily' => \$this->get_dbfamily(), 'settings' => \$this->get_settings_hash());
+            \$cache = cache::make('core', 'databasemeta', \$properties);
+            if (\$data = \$cache->get(\$table)) {
return \$data;
}
}
@@ -299,7 +300,7 @@ class sqlite3_pdo_moodle_database extends pdo_moodle_database {
}

if (\$usecache) {
-            \$result = \$this->metacache->set(\$table, \$structure);
+            \$cache->set(\$table, \$structure);
}

return \$structure;
index 3d45697..e8d8281 100644 (file)
@@ -462,8 +462,9 @@ class sqlsrv_native_moodle_database extends moodle_database {
*/
public function get_columns(\$table, \$usecache = true) {
if (\$usecache) {
-            \$this->init_caches();
-            if (\$data = \$this->metacache->get(\$table)) {
+            \$properties = array('dbfamily' => \$this->get_dbfamily(), 'settings' => \$this->get_settings_hash());
+            \$cache = cache::make('core', 'databasemeta', \$properties);
+            if (\$data = \$cache->get(\$table)) {
return \$data;
}
}
@@ -559,7 +560,7 @@ class sqlsrv_native_moodle_database extends moodle_database {
\$this->free_result(\$result);

if (\$usecache) {
-            \$result = \$this->metacache->set(\$table, \$structure);
+            \$cache->set(\$table, \$structure);
}

return \$structure;
index 8487e9c..7147da3 100644 (file)
@@ -122,5 +122,18 @@ fontselect,fontsizeselect,wrap,code,search,replace,|,cleanup,removeformat,pastet
}

+    if (\$oldversion < 2013102900) {
+        // Reset redesigned editor toolbar setting.
+        \$currentorder = get_config('editor_tinymce', 'customtoolbar');
+        // Start with a wrap.
+        \$neworder = "wrap,". \$currentorder;
+        // Replace all separators with wraps to allow for proper display of groups.
+        \$neworder = preg_replace('/\|\|*/', "wrap", \$neworder);
+        // Insert a wrap between the format selector and the bold button.
+        \$neworder = str_replace("formatselect,bold", "formatselect,wrap,bold", \$neworder);
+        set_config('customtoolbar', \$neworder, 'editor_tinymce');
+    }
+
return true;
}
index 9e17c83..87bc00a 100644 (file)
@@ -30,7 +30,7 @@ \$string['availablebuttons'] = 'Available buttons';
\$string['customconfig'] = 'Custom configuration';
\$string['customconfig_desc'] = 'Custom advanced TinyMCE configuration in JSON format, for example: {"option1" : "value2", "option2" : "value2"}. Any options specified here override standard and plugin settings.';
\$string['customtoolbar'] = 'Editor toolbar';
-\$string['customtoolbar_desc'] = 'Each line contains a list of comma separated button names, use "|" as a group separator, empty lines are ignored. See <a href="{\$a}" target="_blank">{\$a}</a> for the list of default TinyMCE buttons.<br />The first row will always be shown, where as the visibility of second and third toolbars can be toggled';
+\$string['customtoolbar_desc'] = 'Each line contains a list of comma separated button names, use "wrap" as a group separator, empty lines are ignored. See <a href="{\$a}" target="_blank">{\$a}</a> for the list of default TinyMCE buttons.<br />The first row will always be shown, where as the visibility of second and third toolbars can be toggled.';
\$string['fontselectlist'] = 'Available fonts list';
\$string['pluginname'] = 'TinyMCE HTML editor';
\$string['settings'] = 'General settings';
index 7505977..e3d7c1b 100644 (file)
Binary files a/lib/editor/tinymce/plugins/moodlemedia/tinymce/img/icon.png and b/lib/editor/tinymce/plugins/moodlemedia/tinymce/img/icon.png differ
diff --git a/lib/editor/tinymce/plugins/moodlemedia/tinymce/img/icon.svg b/lib/editor/tinymce/plugins/moodlemedia/tinymce/img/icon.svg
new file mode 100644 (file)
index 0000000..69c89a6
--- /dev/null
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In  -->\r
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [\r
+]>\r
+<svg version="1.1"\r
+        x="0px" y="0px" width="16px" height="16px" viewBox="0 0 16 16" style="overflow:visible;enable-background:new 0 0 16 16;"\r
+        xml:space="preserve" preserveAspectRatio="xMinYMid meet">\r
+<defs>\r
+</defs>\r
+<path style="fill:#999999;" d="M0,0v16h16V0H0z M3,15H1v-2h2V15z M3,11H1V9h2V11z M3,7H1V5h2V7z M3,3H1V1h2V3z M12,15H4V1h8V15z\r
+        M15,15h-2v-2h2V15z M15,11h-2V9h2V11z M15,7h-2V5h2V7z M15,3h-2V1h2V3z M10,8l-4,3V5L10,8z"/>\r
+</svg>\r
index e23f60a..4a0148c 100644 (file)
@@ -36,8 +36,6 @@ class tinymce_pdw extends editor_tinymce_plugin {

\$rowsnumber = \$this->count_button_rows(\$params);
if (\$rowsnumber > 1) {
\$params['pdw_toggle_on'] = 1;
\$params['pdw_toggle_toolbars'] = join(',', range(2, \$rowsnumber));
index cf2fcb0..17f7516 100644 (file)
@@ -15,3 +15,4 @@ Upgrade procedure:
5/ reimplement patch in MDL-40668
6/ add in "DOM.setStyle(ifr, 'width',DOM.getSize(ifrcon).w); // Resize iframe" (without quotes)
after "DOM.setStyle(ifr, 'height',DOM.getSize(ifr).h + dy); // Resize iframe"
+7/ reimplement patch in MDL-42481
index 8691147..22e42b7 100644 (file)
\r
// For very small text areas - allow the editable region to be smaller than the size of the toolbars.\r
if (rows >= 3) {\r
+                // This set of changes addresses MDL-42481.\r
+                // Moodle collapses form sections by setting display to none on the fcontainer element.\r
+                // In order to calculate the offsetWidth, the iframe must be visible within the DOM, otherwise it's offsetWidth is\r
+                // calculate as 0px.\r
+                // We attempt to find any collapsed element, uncollapse them, then calculate the width and height, and finally\r
+                // collapse them again.\r
+                var collapsedContainer = DOM.getParent(ifr, 'fieldset.collapsed');\r
+                if (collapsedContainer) {\r
+                    DOM.removeClass(collapsedContainer, 'collapsed');\r
+                }\r
+\r
DOM.setStyle(ifr, 'height',DOM.getSize(ifr).h + dy); // Resize iframe\r
DOM.setStyle(ifr, 'width',DOM.getSize(ifrcon).w); // Resize iframe\r
ed.theme.deltaHeight += dy; // For resize cookie\r
+\r
+                if (collapsedContainer) {\r
+                    // We have a collapsedContainer, so collapse it again.\r
+                }\r
}\r
+\r
},\r
\r
/**\r
index 9f0021a..b65b192 100644 (file)
@@ -25,7 +25,7 @@
defined('MOODLE_INTERNAL') || die();

// The current plugin version (Date: YYYYMMDDXX).
-\$plugin->version   = 2013070500;
+\$plugin->version   = 2013100700;
// Required Moodle version.
\$plugin->requires  = 2013050100;
// Full name of the plugin (used for diagnostics).
index af3d992..e181707 100644 (file)
*/
Wrap : function(id, s) {
this.parent(id, s);
-            this.groupEndClass = 'mceToolbarEnd';
-            this.groupStartClass = 'mceToolbarStart';
+            this.groupEndClass = 'mceGroupEnd';
+            this.toolbarEndClass = 'mceLast';
+            this.groupEndPlaceholder = 'mceToolbarEndPlaceholder';
+            this.groupStartClass = 'mceGroupStart';
this.wrapClass = 'mceWrap';
this.setDisabled(true);
},
'aria-orientation' : 'vertical',
tabindex : '-1'});
return '</td>' +
-                   '<td style="position: relative" class="' + this.groupEndClass + '">' + separator + '</td>' +
+                   '<td style="position: relative" class="' + this.groupEndPlaceholder + '">' + separator + '</td>' +
'<td style="position: relative" class="' + this.groupStartClass + ' ' + this.wrapClass + '">' + separator + '</td>';
-        }
-
+        },

+        postRender : function() {
+            var self = this;
+            // Add a class to the item prior to the wrap.
+            YUI().use('node', function(Y) {
+                var endGroupElements = tinymce.DOM.select('td.' + self.groupEndPlaceholder),
+                    index = 0, curElement, endOfLast;
+                    endBarElements = tinymce.DOM.select('td.' + self.toolbarEndClass)
+                for (index = 0; index < endGroupElements.length; index++) {
+                    if (!endGroupElements.hasOwnProperty(index)) {
+                          continue;
+                    }
+                    curElement = Y.one(endGroupElements[index]);
+                    endOfLast = curElement.previous('td').previous('td');
+                    if (endOfLast) {
+                    }
+                }
+                for (index = 0; index < endBarElements.length; index++) {
+                    if (!endBarElements.hasOwnProperty(index)) {
+                        continue;
+                    }
+                    curElement = Y.one(endBarElements[index]);
+                    endOfLast = curElement.previous('td');
+                    if (endOfLast) {
+                    }
+                }
+            });
+        }
});

tinymce.create('tinymce.plugins.wrapPlugin', {
index da3828d..6b16074 100644 (file)
@@ -15,6 +15,7 @@ Upgrade procedure:
4/ update ./thirdpartylibs.xml
5/ execute cli/update_lang_files.php and review changes in lang/en/editor_tinymce.php
6/ use search/replace to fix oversized zIndexes
+7/ add moodle-has-zindex to the class definition in createColorSplitButton() in tiny_mce_src.js and tiny_mce.js

Changes:
index 3699c51..b8ca304 100644 (file)
@@ -31,11 +31,11 @@ if (\$ADMIN->fulltree) {

-undo,redo,|,underline,strikethrough,sub,sup,|,justifyleft,justifycenter,justifyright,wrap,outdent,indent,|,forecolor,backcolor,|,ltr,rtl,|,nonbreaking,charmap,table
+undo,redo,wrap,underline,strikethrough,sub,sup,wrap,justifyleft,justifycenter,justifyright,wrap,outdent,indent,wrap,forecolor,backcolor,wrap,ltr,rtl,wrap,nonbreaking,charmap,table

-fontselect,fontsizeselect,wrap,code,search,replace,|,cleanup,removeformat,pastetext,pasteword,|,fullscreen";
+fontselect,fontsizeselect,wrap,code,search,replace,wrap,cleanup,removeformat,pastetext,pasteword,wrap,fullscreen";
get_string('customtoolbar', 'editor_tinymce'), get_string('customtoolbar_desc', 'editor_tinymce', 'http://www.tinymce.com/wiki.php/TinyMCE3x:Buttons/controls'), \$default, PARAM_RAW, 100, 8));
index 93c2f08..a3c8e6a 100644 (file)
index be8883c..3bc7d46 100644 (file)
@@ -5,16 +5,16 @@
]>\r
<svg version="1.1"\r
-        x="0px" y="0px" width="16px" height="16px" viewBox="-0.3 -3.6 16 16"\r
-        style="overflow:visible;enable-background:new -0.3 -3.6 16 16;" xml:space="preserve" preserveAspectRatio="xMinYMid meet">\r
+        x="0px" y="0px" width="16px" height="16px" viewBox="0 -3.9 16 16" style="overflow:visible;enable-background:new 0 -3.9 16 16;"\r
+        xml:space="preserve" preserveAspectRatio="xMinYMid meet">\r
<defs>\r
</defs>\r
-<path style="fill:#999999;" d="M0,8c0.3,0,0.5-0.2,0.7-0.4c0.1-0.2,0.3-0.5,0.5-1L3.8,0h0.3l2.7,6.3C7.2,7,7.4,7.5,7.5,7.7\r
-       S7.9,8,8.2,8v0.3H4.3V8c0.4,0,0.6,0,0.8-0.1s0.2-0.2,0.2-0.4c0-0.1,0-0.2-0.1-0.4c0-0.1-0.1-0.2-0.2-0.4L4.7,5.9H2\r
-       C1.8,6.4,1.7,6.7,1.6,6.8C1.5,7.2,1.5,7.4,1.5,7.5c0,0.2,0.1,0.3,0.3,0.4C2,7.9,2.2,8,2.4,8v0.3H0V8z M4.5,5.4L3.4,2.7H3.2L2.2,5.4\r
-       H4.5z M9.8,0.2v3.1C10,3.1,10.1,3,10.3,2.9c0.3-0.2,0.6-0.2,0.9-0.2c0.7,0,1.2,0.3,1.6,0.8s0.6,1.2,0.6,1.9c0,1-0.3,1.8-0.8,2.3\r
-       s-1.2,0.8-2,0.8c-0.3,0-0.6-0.1-0.8-0.2S9.4,8,9.2,7.8L8.3,8.4H8.1V1.1c0-0.3,0-0.4-0.1-0.5C7.9,0.5,7.7,0.5,7.5,0.5V0.2H9.8z\r
-        M9.9,7.6c0.1,0.3,0.4,0.4,0.7,0.4c0.4,0,0.7-0.2,0.9-0.7c0.2-0.4,0.3-1,0.3-1.8c0-0.6-0.1-1.2-0.2-1.6s-0.4-0.7-0.9-0.7\r
-       c-0.3,0-0.5,0.1-0.6,0.3C9.9,3.7,9.8,3.9,9.8,4v3.2C9.8,7.3,9.8,7.5,9.9,7.6z M14,6.7c0.2-0.2,0.4-0.3,0.7-0.3s0.5,0.1,0.7,0.3\r
-       s0.3,0.4,0.3,0.7S15.6,8,15.4,8.1S15,8.4,14.7,8.4S14.2,8.3,14,8.1s-0.3-0.4-0.3-0.7S13.8,6.9,14,6.7z"/>\r
+<path style="fill:#999999;" d="M15,6.2c0.3,0,0.5,0.1,0.7,0.3S16,6.9,16,7.1s-0.1,0.5-0.3,0.7S15.3,8.1,15,8.1S14.5,8,14.3,7.8\r
+       S14,7.4,14,7.1s0.1-0.5,0.3-0.7S14.8,6.2,15,6.2z M10.3,0v3c0.5-0.5,1-0.7,1.5-0.7c0.4,0,0.7,0.1,1.1,0.3s0.6,0.5,0.8,0.9\r
+       s0.3,0.9,0.3,1.4c0,0.6-0.1,1.1-0.4,1.6s-0.6,0.9-1,1.1s-0.9,0.4-1.4,0.4c-0.3,0-0.6,0-0.8-0.1S10,7.7,9.8,7.5L8.8,8.1H8.7v-7\r
+       c0-0.3,0-0.5,0-0.6c0-0.1-0.1-0.2-0.2-0.2S8.2,0.2,8,0.2V0H10.3z M10.3,3.5V6c0,0.5,0,0.8,0,0.9c0,0.2,0.1,0.4,0.3,0.6\r
+       s0.3,0.2,0.6,0.2c0.2,0,0.4-0.1,0.5-0.2s0.3-0.3,0.4-0.7s0.1-0.9,0.1-1.8c0-0.8-0.1-1.4-0.3-1.7C11.7,3.1,11.5,3,11.2,3\r
+       C10.9,3,10.6,3.2,10.3,3.5z M4.9,5.8H2.1L1.8,6.6C1.6,6.9,1.6,7.1,1.6,7.3c0,0.2,0.1,0.4,0.3,0.5C2,7.8,2.2,7.9,2.6,7.9v0.2H0V7.9\r
+       c0.3,0,0.5-0.2,0.7-0.4s0.4-0.6,0.7-1.2L4.2,0h0.1l2.9,6.5c0.3,0.6,0.5,1,0.7,1.2C8,7.8,8.2,7.9,8.4,7.9v0.2H4.6V7.9h0.2\r
+       c0.3,0,0.5,0,0.7-0.1c0.1-0.1,0.1-0.2,0.1-0.3c0-0.1,0-0.1,0-0.2c0,0-0.1-0.2-0.2-0.4L4.9,5.8z M4.7,5.4L3.5,2.7L2.3,5.4H4.7z"/>\r
</svg>\r
index 73488d8..40b68a4 100644 (file)
index 3d4dc46..bde1557 100644 (file)
@@ -5,20 +5,17 @@
]>\r
<svg version="1.1"\r
-        x="0px" y="0px" width="16px" height="16px" viewBox="0 -4.6 16 16" style="overflow:visible;enable-background:new 0 -4.6 16 16;"\r
+        x="0px" y="0px" width="16px" height="16px" viewBox="0 -3.9 16 16" style="overflow:visible;enable-background:new 0 -3.9 16 16;"\r
xml:space="preserve" preserveAspectRatio="xMinYMid meet">\r
<defs>\r
</defs>\r
-<path style="fill:#999999;" d="M0,6c0.2,0,0.4-0.1,0.5-0.3c0.1-0.1,0.2-0.4,0.4-0.8l2-4.9h0.3l2,4.7c0.2,0.5,0.4,0.9,0.5,1\r
-       C5.8,5.9,5.9,6,6.1,6v0.2H3.2V6c0.3,0,0.5,0,0.6-0.1c0.1,0,0.1-0.1,0.1-0.3c0-0.1,0-0.2-0.1-0.3c0-0.1-0.1-0.2-0.1-0.3L3.5,4.4h-2\r
-       C1.4,4.8,1.3,5,1.2,5.1C1.2,5.4,1.1,5.5,1.1,5.6c0,0.1,0.1,0.2,0.3,0.3C1.5,6,1.6,6,1.8,6v0.2H0V6z M3.4,4.1L2.5,2H2.4L1.6,4.1H3.4z\r
-        M5.6,6c0.2,0,0.4,0,0.5-0.1c0.2-0.1,0.3-0.3,0.3-0.5V1c0-0.3-0.1-0.4-0.3-0.5C6,0.4,5.8,0.4,5.6,0.4V0.1h2.8c0.5,0,1,0.1,1.3,0.2\r
-       c0.7,0.2,1,0.7,1,1.3c0,0.4-0.1,0.7-0.4,0.9C10,2.7,9.7,2.8,9.4,2.9V3C9.7,3,10,3.1,10.3,3.3C10.8,3.6,11,4,11,4.5\r
-       c0,0.5-0.2,0.9-0.7,1.2C9.9,6.1,9.2,6.2,8.5,6.2H5.6V6z M8.9,2.6c0.2-0.2,0.3-0.5,0.3-1C9.2,1.3,9.2,1,9,0.7\r
-       C8.9,0.5,8.7,0.4,8.3,0.4c-0.2,0-0.3,0-0.4,0.1S7.8,0.7,7.8,0.8v2C8.4,2.9,8.7,2.8,8.9,2.6z M7.9,5.7C8,5.9,8.1,5.9,8.3,5.9\r
-       c0.4,0,0.7-0.1,0.9-0.3c0.2-0.2,0.3-0.6,0.3-1c0-0.6-0.2-1.1-0.6-1.3C8.7,3.2,8.3,3.1,7.8,3.1v2.2C7.8,5.5,7.8,5.6,7.9,5.7z\r
-        M15.2,0.2c0.4,0.1,0.6,0.2,0.6,0.2c0.1,0,0.2,0,0.3-0.1c0.1-0.1,0.1-0.2,0.1-0.3h0.3v2.1h-0.2C16,1.7,15.8,1.3,15.6,1\r
-       c-0.4-0.5-0.9-0.7-1.4-0.7c-0.6,0-1,0.3-1.3,0.8c-0.3,0.5-0.4,1.2-0.4,2.1c0,0.6,0.1,1.2,0.2,1.6c0.3,0.8,0.8,1.2,1.5,1.2\r
-       c0.5,0,0.9-0.1,1.3-0.4c0.2-0.1,0.5-0.4,0.8-0.7l0.3,0.2c-0.4,0.4-0.7,0.7-0.9,0.9c-0.5,0.3-1,0.5-1.6,0.5c-0.9,0-1.6-0.3-2.2-0.8\r
-       c-0.7-0.6-1-1.4-1-2.4c0-1,0.3-1.8,1-2.4C12.4,0.3,13.2,0,14,0C14.4,0,14.8,0.1,15.2,0.2z"/>\r
+<path style="fill:#999999;" d="M13.8,3.8C14.5,4,15,4.2,15.3,4.5C15.8,4.8,16,5.3,16,5.9c0,0.6-0.2,1.1-0.7,1.5\r
+       c-0.6,0.5-1.4,0.7-2.6,0.7h-4V7.8c0.4,0,0.6,0,0.7-0.1s0.2-0.2,0.3-0.3s0.1-0.4,0.1-0.8V1.5c0-0.4,0-0.7-0.1-0.8S9.5,0.5,9.4,0.4\r
+       S9,0.3,8.7,0.3V0.1h3.8c0.9,0,1.6,0.1,1.9,0.2s0.7,0.4,0.9,0.7s0.3,0.7,0.3,1c0,0.4-0.1,0.7-0.4,1S14.5,3.7,13.8,3.8z M11.6,4.1v2.5\r
+       l0,0.3c0,0.2,0.1,0.4,0.2,0.5s0.3,0.2,0.5,0.2c0.3,0,0.6-0.1,0.9-0.2s0.5-0.3,0.6-0.6s0.2-0.6,0.2-0.9c0-0.4-0.1-0.7-0.3-1\r
+       S13.3,4.4,13,4.3S12.2,4.1,11.6,4.1z M11.6,3.7c0.6,0,1-0.1,1.2-0.2s0.5-0.3,0.6-0.5s0.2-0.5,0.2-0.9s-0.1-0.6-0.2-0.9\r
+       s-0.3-0.4-0.6-0.5s-0.7-0.2-1.2-0.2V3.7z M4.9,5.8H2.1L1.8,6.6C1.6,6.9,1.6,7.1,1.6,7.3c0,0.2,0.1,0.4,0.3,0.5\r
+       C2,7.8,2.2,7.9,2.6,7.9v0.2H0V7.9c0.3,0,0.5-0.2,0.7-0.4s0.4-0.6,0.7-1.2L4.2,0h0.1l2.9,6.5c0.3,0.6,0.5,1,0.7,1.2\r
+       C8,7.8,8.2,7.9,8.4,7.9v0.2H4.6V7.9h0.2c0.3,0,0.5,0,0.7-0.1c0.1-0.1,0.1-0.2,0.1-0.3c0-0.1,0-0.1,0-0.2c0,0-0.1-0.2-0.2-0.4\r
+       L4.9,5.8z M4.7,5.4L3.5,2.7L2.3,5.4H4.7z"/>\r
</svg>\r
index 2d76266..19bf15b 100644 (file)
index f6eae29..5b4bea9 100644 (file)
@@ -9,5 +9,5 @@
xml:space="preserve" preserveAspectRatio="xMinYMid meet">\r
<defs>\r
</defs>\r
-<path style="fill:#999999;" d="M0,0h16v2H0V0z M0,6h16v2H0V6z M0,12h16v2H0V12z M3,3h10v2H3V3z M3,9h10v2H3V9z"/>\r
+<path style="fill:#999999;" d="M0,12h16v2H0V12z M13,9H3v2h10V9z M0,8h16V6H0V8z M13,3H3v2h10V3z M16,0H0v2h16V0z"/>\r
</svg>\r
index 1d87f1c..524002d 100644 (file)
index b792e41..5e79a65 100644 (file)
@@ -9,5 +9,5 @@
xml:space="preserve" preserveAspectRatio="xMinYMid meet">\r
<defs>\r
</defs>\r
-<path style="fill:#999999;" d="M0,0h16v2H0V0z M0,3h10v2H0V3z M0,6h16v2H0V6z M0,9h10v2H0V9z M0,12h16v2H0V12z"/>\r
+<path style="fill:#999999;" d="M0,12h16v2H0V12z M10,9H0v2h10V9z M0,8h16V6H0V8z M10,3H0v2h10V3z M16,2V0H0v2H16z"/>\r
</svg>\r
index 113b735..ab92fb6 100644 (file)
index c636b9e..961a31e 100644 (file)
@@ -9,5 +9,5 @@
xml:space="preserve" preserveAspectRatio="xMinYMid meet">\r
<defs>\r
</defs>\r
-<path style="fill:#999999;" d="M0,0h16v2H0V0z M0,6h16v2H0V6z M0,12h16v2H0V12z M6,3h10v2H6V3z M6,9h10v2H6V9z"/>\r
+<path style="fill:#999999;" d="M0,12h16v2H0V12z M0,0v2h16V0H0z M6,11h10V9H6V11z M0,8h16V6H0V8z M6,5h10V3H6V5z"/>\r
</svg>\r
index 0f9b1cf..a372dd6 100644 (file)
index 3f460e3..010f748 100644 (file)
@@ -5,12 +5,14 @@
]>\r
<svg version="1.1"\r
-        x="0px" y="0px" width="16px" height="16px" viewBox="-2.3 0 16 16" style="overflow:visible;enable-background:new -2.3 0 16 16;"\r
+        x="0px" y="0px" width="16px" height="16px" viewBox="-1 -1 16 16" style="overflow:visible;enable-background:new -1 -1 16 16;"\r
xml:space="preserve" preserveAspectRatio="xMinYMid meet">\r
<defs>\r
</defs>\r
-<path style="fill:#999999;" d="M10.8,9.2c0.4,0.7,0.6,1.5,0.6,2.3c0,1.3-0.4,2.3-1.3,3.2S8.1,16,6.9,16H3.4H1.1H0V0h1.1h2.3h2.3\r
-       C7,0,8.1,0.4,8.9,1.3c0.9,0.9,1.3,2,1.3,3.2c0,1.1-0.4,2.1-1.1,2.9C9.9,7.9,10.4,8.5,10.8,9.2z M3.4,6.9h1.8c0.5,0,0.9-0.2,1.3-0.7\r
-       c0.4-0.5,0.5-1,0.5-1.6C7.1,4,6.9,3.4,6.5,3C6.2,2.5,5.7,2.3,5.2,2.3H3.4V6.9z M7.6,13c0.4-0.5,0.6-1,0.6-1.6c0-0.6-0.2-1.2-0.6-1.6\r
-       C7.2,9.4,6.8,9.1,6.3,9.1H3.4v4.6h2.9C6.8,13.7,7.2,13.5,7.6,13z"/>\r
+<path style="fill:#999999;" d="M0,14.6c0.9-0.1,1.5-0.2,1.8-0.4s0.4-0.8,0.4-1.6V2.5c0-0.8-0.1-1.4-0.4-1.6C1.5,0.6,0.9,0.5,0,0.4V0\r
+       h6.3c1.8,0,3.3,0.3,4.3,0.9c1.1,0.6,1.6,1.6,1.6,3c0,1.1-0.4,1.9-1.1,2.4c-0.4,0.3-1.1,0.6-1.9,0.8c1,0.3,1.9,0.7,2.7,1.3\r
+       C12.7,9,13,9.8,13,10.8c0,1.8-0.8,3-2.5,3.7C9.7,14.8,8.6,15,7.4,15H0V14.6z M8.5,6.4C9.5,5.9,10,5.1,10,4c0-1.4-0.6-2.3-1.7-2.7\r
+       C7.7,1,6.8,0.8,5.5,0.8C5,0.8,4.7,0.9,4.6,1C4.5,1,4.5,1.3,4.5,1.6v5.1l2.2,0C7.4,6.7,8,6.6,8.5,6.4z M9.3,13.5\r
+       c0.8-0.5,1.2-1.3,1.2-2.6c0-1.3-0.5-2.1-1.4-2.6C8.1,7.8,7,7.6,5.6,7.6c-0.3,0-0.6,0-0.7,0s-0.2,0-0.4,0v5.6c0,0.4,0.1,0.6,0.3,0.8\r
+       c0.2,0.1,0.7,0.2,1.5,0.2C7.5,14.2,8.5,14,9.3,13.5z"/>\r
</svg>\r
index 2335cd2..17c0d7b 100644 (file)
@@ -9,9 +9,9 @@
xml:space="preserve" preserveAspectRatio="xMinYMid meet">\r
<defs>\r
</defs>\r
-<path style="fill:#999999;" d="M0.6,3.4C0.2,3,0,2.5,0,2s0.2-1,0.6-1.4C1,0.2,1.5,0,2,0c0.5,0,1,0.2,1.4,0.6C3.8,1,4,1.5,4,2\r
-       S3.8,3,3.4,3.4C3,3.8,2.5,4,2,4C1.5,4,1,3.8,0.6,3.4z M0.6,9.4C0.2,9,0,8.5,0,8s0.2-1,0.6-1.4C1,6.2,1.5,6,2,6c0.5,0,1,0.2,1.4,0.6\r
-       C3.8,7,4,7.5,4,8S3.8,9,3.4,9.4C3,9.8,2.5,10,2,10C1.5,10,1,9.8,0.6,9.4z M0.6,15.4C0.2,15,0,14.5,0,14c0-0.5,0.2-1,0.6-1.4\r
-       C1,12.2,1.5,12,2,12c0.5,0,1,0.2,1.4,0.6C3.8,13,4,13.5,4,14c0,0.5-0.2,1-0.6,1.4C3,15.8,2.5,16,2,16C1.5,16,1,15.8,0.6,15.4z M6,1\r
-       h10v2H6V1z M6,7h10v2H6V7z M6,13h10v2H6V13z"/>\r
+<path style="fill:#999999;" d="M0.6,15.4C0.2,15,0,14.5,0,14c0-0.5,0.2-1,0.6-1.4C1,12.2,1.5,12,2,12c0.5,0,1,0.2,1.4,0.6\r
+       C3.8,13,4,13.5,4,14c0,0.5-0.2,1-0.6,1.4C3,15.8,2.5,16,2,16C1.5,16,1,15.8,0.6,15.4z M0.6,9.4C0.2,9,0,8.5,0,8s0.2-1,0.6-1.4\r
+       C1,6.2,1.5,6,2,6c0.5,0,1,0.2,1.4,0.6C3.8,7,4,7.5,4,8S3.8,9,3.4,9.4C3,9.8,2.5,10,2,10C1.5,10,1,9.8,0.6,9.4z M0.6,3.4\r
+       C0.2,3,0,2.5,0,2s0.2-1,0.6-1.4C1,0.2,1.5,0,2,0c0.5,0,1,0.2,1.4,0.6C3.8,1,4,1.5,4,2S3.8,3,3.4,3.4C3,3.8,2.5,4,2,4\r
+       C1.5,4,1,3.8,0.6,3.4z M6,13h10v2H6V13z M6,7h10v2H6V7z M6,1v2h10V1H6z"/>\r
</svg>\r
index 73c65ce..63a7ac1 100644 (file)
new file mode 100644 (file)
index 0000000..607dc55
Binary files /dev/null and b/lib/editor/tinymce/tiny_mce/3.5.8/themes/advanced/skins/moodle/img/cancel.png differ
new file mode 100644 (file)
index 0000000..271743b
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In  -->\r
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [\r
+]>\r
+<svg version="1.1"\r
+        x="0px" y="0px" width="16px" height="16px" viewBox="0 0 16 16" style="overflow:visible;enable-background:new 0 0 16 16;"\r
+        xml:space="preserve" preserveAspectRatio="xMinYMid meet">\r
+<defs>\r
+</defs>\r
+<path style="fill:#999999;" d="M15.9,12.9L15.9,12.9L11,8l4.9-4.9C15.9,3.1,15.9,3,16,3c0.1-0.2,0-0.4-0.1-0.5l-2.3-2.3\r
+       C13.4,0,13.2,0,13,0c-0.1,0-0.1,0.1-0.2,0.1L8,5L3.1,0.1C3.1,0.1,3,0.1,3,0C2.8,0,2.6,0,2.4,0.1L0.1,2.4C0,2.6,0,2.8,0,3\r
+       c0,0.1,0.1,0.1,0.1,0.2L5,8l-4.9,4.9C0.1,12.9,0.1,13,0,13c-0.1,0.2,0,0.4,0.1,0.5l2.3,2.3C2.6,16,2.8,16,3,16\r
+       c0.1,0,0.1-0.1,0.2-0.1L8,11l4.9,4.9c0.1,0.1,0.1,0.1,0.2,0.1c0.2,0.1,0.4,0,0.5-0.1l2.3-2.3C16,13.4,16,13.2,16,13\r
+       C15.9,13,15.9,12.9,15.9,12.9"/>\r
+</svg>\r
index d519b25..64aecdd 100644 (file)
index a3483ab..cce8959 100644 (file)
@@ -9,7 +9,8 @@
xml:space="preserve" preserveAspectRatio="xMinYMid meet">\r
<defs>\r
</defs>\r
-<path style="fill:#999999;" d="M8.1,15.6c-1.9,1-8.7-6-8.1-9.3c0.1-0.7,2.8,0.8,6.1-2l5.4,5.4C11,11.2,9.6,14.8,8.1,15.6z M10.7,7.5\r
-       l1.1,1.2l0.3-0.3c0.6-0.6,0.6-1.7,0-2.3L15.2,3c0.6-0.6,0.6-1.7,0-2.3L15,0.5c-0.6-0.6-1.7-0.6-2.3,0L9.6,3.6L9.5,3.5\r
-       c-0.6-0.6-1.7-0.6-2.3,0L7,3.7L8.2,5L10.7,7.5z"/>\r
+<path style="fill:#999999;" d="M7,3.7l0.3-0.3c0.6-0.6,1.7-0.6,2.3,0l0.1,0.1l3.1-3.1c0.6-0.6,1.7-0.6,2.3,0l0.2,0.2\r
+       c0.6,0.6,0.6,1.7,0,2.3l-3.1,3.1c0.6,0.6,0.6,1.7,0,2.3l-0.3,0.3L7,3.7z M8.1,15.6c-1.9,1-8.7-6-8.1-9.3c0.1-0.7,2.8,0.8,6.1-2\r
+       l5.4,5.4C11,11.2,9.6,14.8,8.1,15.6z M10.4,9.9L6,5.6C3.9,7.1,2,7.1,1,7.1c0.2,1.4,1.5,3.6,3.4,5.4h0c1.7,1.7,2.9,2.2,3.2,2.2\r
+       C8.3,14.3,9.4,12.5,10.4,9.9z"/>\r
</svg>\r
index 3989a18..7782a70 100644 (file)
index 5d89d28..bd7f82e 100644 (file)
@@ -5,10 +5,17 @@
]>\r
<svg version="1.1"\r
-        x="0px" y="0px" width="16px" height="16px" viewBox="-0.2 0 16 16" style="overflow:visible;enable-background:new -0.2 0 16 16;"\r
+        x="0px" y="0px" width="16px" height="16px" viewBox="0 -1.3 16 16" style="overflow:visible;enable-background:new 0 -1.3 16 16;"\r
xml:space="preserve" preserveAspectRatio="xMinYMid meet">\r
<defs>\r
</defs>\r
-<path style="fill:#999999;" d="M0,14h9v2H0V14z M3,0h11v2H3V0z M4.3,13L7.5,0.8l1.9,0.5L6.4,13H4.3z M14.5,16l-2-2l-2,2l-1-1l2-2\r
-       l-2-2l1-1l2,2l2-2l1,1l-2,2l2,2L14.5,16z"/>\r
+<path style="fill:#999999;" d="M7,14.7H0v-1h7V14.7z M1.1,11.7h5.2v-0.3c-0.6,0-1.1-0.1-1.3-0.2c-0.2-0.1-0.3-0.3-0.3-0.7\r
+       c0-0.1,0-0.3,0.1-0.5c0-0.2,0.1-0.3,0.1-0.5l2.5-9h1c0.7,0,1.2,0.1,1.5,0.4s0.4,0.7,0.4,1.2l0,0.6l0.3,0L11.3,0H1.7L1,2.8l0.3,0.1\r
+       c0.6-1.1,1.1-1.7,1.6-1.9c0.4-0.2,1.4-0.3,2.7-0.3L3,10.1c-0.1,0.5-0.4,0.9-0.8,1.1c-0.2,0.1-0.6,0.2-1.1,0.2V11.7z M8.1,14.7h2.5\r
+       v-0.2c-0.3,0-0.5,0-0.6-0.1c-0.2-0.1-0.3-0.2-0.3-0.3c0-0.1,0.1-0.2,0.2-0.4c0.1-0.1,0.2-0.3,0.4-0.5l1.3-1.6c0.7,1.1,1.2,1.8,1.4,2\r
+       s0.2,0.5,0.2,0.6c0,0.1-0.1,0.2-0.2,0.3c-0.1,0-0.3,0.1-0.6,0.1v0.2h3.2v-0.2c-0.3,0-0.5-0.1-0.7-0.2c-0.1-0.1-0.3-0.3-0.6-0.6\r
+       l-2.1-3l1.6-2c0.4-0.5,0.7-0.8,0.9-0.9c0.2-0.1,0.4-0.1,0.7-0.1V7.5H13v0.2c0.3,0,0.4,0,0.5,0.1c0.2,0.1,0.2,0.2,0.2,0.3\r
+       c0,0.1,0,0.1-0.1,0.2c-0.1,0.1-0.2,0.3-0.4,0.5l-1.2,1.5L11,8.6c-0.1-0.1-0.1-0.2-0.1-0.2c-0.1-0.1-0.1-0.3-0.1-0.4\r
+       c0-0.2,0.1-0.3,0.2-0.3c0.1,0,0.3-0.1,0.6-0.1V7.5H8.2v0.2c0.4,0,0.6,0.1,0.9,0.3c0.2,0.2,0.6,0.7,1.1,1.4l1.2,1.8l-1.7,2.1\r
+       c-0.5,0.6-0.8,0.9-0.9,1c-0.2,0.1-0.4,0.2-0.7,0.2V14.7z"/>\r
</svg>\r
index fc85467..990804b 100644 (file)
@@ -9,5 +9,5 @@
xml:space="preserve" preserveAspectRatio="xMinYMid meet">\r
<defs>\r
</defs>\r
-<path style="fill:#999999;" d="M0,0h16v2H0V0z M4,4v6L0,7L4,4z M0,12h16v2H0V12z M6,3h10v2H6V3z M6,6h10v2H6V6z M6,9h10v2H6V9z"/>\r
+<path style="fill:#999999;" d="M0,12h16v2H0V12z M6,9h10v2H6V9z M6,6h10v2H6V6z M6,3h10v2H6V3z M16,2V0H0v2H16z M4,4v6L0,7L4,4z"/>\r
</svg>\r
index 84da3f9..ee311c5 100644 (file)
index f3fa58d..3599875 100644 (file)
@@ -1,17 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>\r
<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In  -->\r
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [\r
]>\r
<svg version="1.1"\r
-   x="0px" y="0px" width="16px" height="16px" viewBox="0 -0.1 16 16" style="overflow:visible;enable-background:new 0 -0.1 16 16;"\r
-   xml:space="preserve" preserveAspectRatio="xMinYMid meet">\r
+        x="0px" y="0px" width="16px" height="16px" viewBox="0 -1 16 16" style="overflow:visible;enable-background:new 0 -1 16 16;"\r
+        xml:space="preserve">\r
<defs>\r
</defs>\r
-<path style="fill:#999999;" d="M16.1,15.3v0.6H8.6v-0.6c0.7,0,1.2-0.1,1.5-0.2c0.2-0.1,0.4-0.3,0.4-0.7c0-0.2-0.1-0.5-0.2-0.8\r
-  c-0.1-0.2-0.2-0.5-0.3-0.8l-0.4-0.9h3.9l0.1,0.2c0.6,1.4,1,2.2,1.3,2.6C15.1,15.1,15.5,15.3,16.1,15.3z M3.3,14.4\r
-  c0-0.3,0.1-0.7,0.3-1.3c0.1-0.2,0.2-0.6,0.5-1.3H3l-0.3,0.7c-0.4,1-0.7,1.6-0.9,1.9C1.4,15,1,15.2,0.4,15.3v0.6h4.7v-0.6\r
-  c-0.5,0-0.9-0.1-1.2-0.1C3.5,15,3.3,14.7,3.3,14.4z M16,9.9H0v1h16V9.9z M5.2,8.9l1.5-3.7h0.2l1.6,3.7h3.8L8.4,0H7.8L4.2,8.9H5.2z"\r
-  />\r
-</svg>
\ No newline at end of file
+<path style="fill:#999999;" d="M14.9,14.2c0.2,0.2,0.6,0.3,1.1,0.4V15h-5.7v-0.4c0.7-0.1,1.1-0.1,1.3-0.2c0.2-0.1,0.3-0.3,0.3-0.6\r
+       c0-0.1,0-0.3-0.1-0.6c-0.1-0.3-0.2-0.6-0.3-0.9L10.9,11h2.4l0.7,1.6C14.4,13.5,14.7,14,14.9,14.2z M3.5,13.6c0-0.2,0.1-0.4,0.2-0.8\r
+       C3.8,12.6,4,12,4.4,11h-1c-0.7,1.6-1.2,2.6-1.4,2.9c-0.3,0.4-0.7,0.6-1.3,0.6V15H5v-0.4c-0.5,0-0.9-0.1-1.1-0.2\r
+       C3.6,14.2,3.5,14,3.5,13.6z M5.6,8l2-4.9l2,4.9H12L8.4,0H8L4.6,8H5.6z M16,9H0v1h16V9z"/>\r
+</svg>\r
index 20e3888..592c0c3 100644 (file)
index 66d8748..5d022f5 100644 (file)
@@ -9,8 +9,10 @@
xml:space="preserve" preserveAspectRatio="xMinYMid meet">\r
<defs>\r
</defs>\r
-<path style="fill:#999999;" d="M13.5,9.5c-0.1,0.5-0.3,0.9-0.5,1.3l1.6,2l-1.8,1.8l-2-1.6c-0.4,0.2-0.9,0.4-1.3,0.5L9.2,16H6.7\r
-       l-0.2-2.5C6,13.4,5.6,13.2,5.2,13l-2,1.6l-1.8-1.8l1.6-2C2.8,10.4,2.6,10,2.5,9.5L0,9.2V6.8l2.5-0.3C2.6,6,2.8,5.6,3,5.2l-1.6-2\r
-       l1.8-1.8l2,1.6C5.6,2.8,6,2.6,6.5,2.5L6.7,0h2.5l0.2,2.5C10,2.6,10.4,2.8,10.8,3l2-1.6l1.8,1.8l-1.6,2c0.2,0.4,0.4,0.9,0.5,1.3\r
-       L16,6.8v2.5L13.5,9.5z M11,7L9,5H7L5,7v2l2,2h2l2-2V7z"/>\r
+<path style="fill:#999999;" d="M15.9,9.3C16,8.9,16,8.4,16,8s0-0.9-0.1-1.3l-2.1-0.4c-0.1-0.4-0.3-0.8-0.5-1.2l1.2-1.8\r
+       C14,2.6,13.4,2,12.6,1.5l-1.8,1.2c-0.4-0.2-0.8-0.4-1.2-0.5L9.3,0.1C8.9,0,8.4,0,8,0S7.1,0,6.7,0.1L6.3,2.2C5.9,2.4,5.5,2.5,5.1,2.7\r
+       L3.4,1.5C2.6,2,2,2.6,1.5,3.4l1.2,1.8C2.5,5.5,2.4,5.9,2.2,6.3L0.1,6.7C0,7.1,0,7.6,0,8c0,0.4,0,0.9,0.1,1.3l2.1,0.4\r
+       c0.1,0.4,0.3,0.8,0.5,1.2l-1.2,1.8C2,13.4,2.6,14,3.4,14.5l1.8-1.2c0.4,0.2,0.8,0.4,1.2,0.5l0.4,2.1C7.1,16,7.6,16,8,16\r
+       s0.9,0,1.3-0.1l0.4-2.1c0.4-0.1,0.8-0.3,1.2-0.5l1.8,1.2c0.7-0.5,1.3-1.1,1.9-1.9l-1.2-1.8c0.2-0.4,0.4-0.8,0.5-1.2L15.9,9.3z M8,10\r
+       c-1.1,0-2-0.9-2-2c0-1.1,0.9-2,2-2s2,0.9,2,2C10,9.1,9.1,10,8,10z"/>\r
</svg>\r
index 94247af..50584d7 100644 (file)
index 33465c9..83a3bea 100644 (file)
@@ -9,12 +9,9 @@
xml:space="preserve" preserveAspectRatio="xMinYMid meet">\r
<defs>\r
</defs>\r
-<path style="fill:#999999;" d="M16,8c0,2.2-0.8,4.1-2.3,5.7C12.1,15.2,10.2,16,8,16s-4.1-0.8-5.7-2.3C0.8,12.1,0,10.2,0,8\r
-       s0.8-4.1,2.3-5.7S5.8,0,8,0s4.1,0.8,5.7,2.3S16,5.8,16,8z M14.8,8c0-1.9-0.7-3.4-2-4.8c-1.3-1.3-2.9-2-4.8-2c-1.9,0-3.4,0.7-4.8,2\r
-       c-1.3,1.3-2,2.9-2,4.8s0.7,3.4,2,4.8c1.3,1.3,2.9,2,4.8,2c1.9,0,3.4-0.7,4.8-2C14.1,11.4,14.8,9.9,14.8,8z M3,8.2\r
-       c0.2,1.4,0.7,2.5,1.7,3.4S6.7,13,8,13c1.3,0,2.4-0.5,3.3-1.4s1.5-2,1.7-3.4c-0.5,0.5-1.1,1-2,1.4C10,10,9.1,10.2,8,10.2\r
-       S6,10,5.1,9.6C4.2,9.2,3.5,8.8,3,8.2z M5,4C4.7,4,4.5,4.1,4.3,4.3C4.1,4.5,4,4.7,4,5c0,0.3,0.1,0.5,0.3,0.7S4.7,6,5,6\r
-       c0.3,0,0.5-0.1,0.7-0.3C5.9,5.5,6,5.3,6,5c0-0.3-0.1-0.5-0.3-0.7C5.5,4.1,5.3,4,5,4z M11,4c-0.3,0-0.5,0.1-0.7,0.3\r
-       C10.1,4.5,10,4.7,10,5c0,0.3,0.1,0.5,0.3,0.7C10.5,5.9,10.7,6,11,6s0.5-0.1,0.7-0.3C11.9,5.5,12,5.3,12,5c0-0.3-0.1-0.5-0.3-0.7\r
-       C11.5,4.1,11.3,4,11,4z"/>\r
+<path style="fill:#999999;" d="M8,0C3.6,0,0,3.6,0,8s3.6,8,8,8s8-3.5,8-8S12.4,0,8,0z M8,15c-3.9,0-7-3.1-7-7c0-3.9,3.1-7,7-7\r
+       s7,3.2,7,7C15,11.9,11.9,15,8,15z M8,12.8c-4.9,0-5.8-4.4-5.8-4.4C2.1,8.2,2.2,7.9,2.5,7.8C2.8,7.8,3.1,8,3.1,8.2\r
+       c0,0.1,0.8,3.6,4.9,3.6c4.1,0,4.8-3.5,4.9-3.6c0.1-0.3,0.3-0.4,0.6-0.4c0.3,0.1,0.4,0.3,0.4,0.6C13.8,8.5,12.9,12.8,8,12.8z\r
+        M11.4,5.2c0,0.8-0.3,1.5-0.7,1.5C10.3,6.7,10,6,10,5.2s0.3-1.5,0.7-1.5C11.1,3.7,11.4,4.4,11.4,5.2z M6,5.2C6,6,5.7,6.7,5.3,6.7\r
+       C4.9,6.7,4.6,6,4.6,5.2s0.3-1.5,0.7-1.5C5.7,3.7,6,4.4,6,5.2z"/>\r
</svg>\r
index da59dc4..97fa170 100644 (file)
index cfcaf0a..19910ff 100644 (file)
@@ -5,31 +5,18 @@
]>\r
<svg version="1.1"\r
-        x="0px" y="0px" width="16px" height="16px" viewBox="0 0 16 16" style="overflow:visible;enable-background:new 0 0 16 16;"\r
+        x="0px" y="0px" width="16px" height="16px" viewBox="0 0.1 16 16" style="overflow:visible;enable-background:new 0 0.1 16 16;"\r
xml:space="preserve" preserveAspectRatio="xMinYMid meet">\r
<defs>\r
</defs>\r
-<path style="fill:#999999;" d="M3.5,16v-2H0V8h2v4h1.5v-2l3,3L3.5,16z M3,7.2c0.2,0.1,0.4,0.2,0.7,0.2c0.2,0,0.5-0.1,0.7-0.2\r
-       c0.2-0.1,0.4-0.3,0.6-0.6L4.7,6.5C4.6,6.6,4.5,6.7,4.5,6.7c0,0-0.1,0-0.1,0S4.3,6.5,4.2,6.5c0-0.1,0-0.2,0-0.4V4.1\r
-       c0-0.5,0-0.9-0.1-1C4.1,2.8,3.9,2.6,3.6,2.4C3.3,2.2,3,2.1,2.5,2.1c-0.4,0-0.8,0.1-1.1,0.2S0.7,2.6,0.5,2.8C0.3,3.1,0.2,3.3,0.2,3.6\r
-       c0,0.2,0.1,0.3,0.2,0.5C0.6,4.2,0.7,4.3,1,4.3c0.2,0,0.4-0.1,0.5-0.2C1.6,4,1.7,3.8,1.7,3.6c0-0.1-0.1-0.3-0.2-0.4\r
-       C1.4,3.1,1.3,3,1.3,2.9c0-0.1,0-0.2,0.1-0.2C1.6,2.6,1.8,2.5,2,2.5c0.1,0,0.3,0,0.4,0.1c0.1,0.1,0.2,0.2,0.2,0.3\r
-       c0,0.1,0.1,0.3,0.1,0.7v0.5C1.6,4.6,0.9,5,0.6,5.3C0.2,5.6,0.1,6,0.1,6.4c0,0.3,0.1,0.5,0.3,0.7c0.2,0.2,0.4,0.3,0.7,0.3\r
-       c0.5,0,1-0.3,1.6-0.8C2.8,6.8,2.9,7,3,7.2z M2.1,6.5c-0.2,0-0.3,0-0.4-0.1C1.6,6.2,1.5,6,1.5,5.9c0-0.2,0.1-0.4,0.2-0.6\r
-       C2,5,2.3,4.7,2.7,4.5v1.7C2.5,6.4,2.3,6.5,2.1,6.5z M5.3,0v0.2c0.2,0,0.3,0,0.4,0.1c0.1,0,0.1,0.1,0.2,0.2c0,0.1,0,0.2,0,0.5v6.4\r
-       h0.2l0.8-0.5c0.2,0.2,0.4,0.3,0.6,0.4S8,7.4,8.3,7.4c0.5,0,0.9-0.1,1.3-0.4c0.4-0.2,0.7-0.6,0.9-1s0.3-0.9,0.3-1.5\r
-       c0-0.5-0.1-0.9-0.3-1.3s-0.4-0.7-0.7-0.9c-0.3-0.2-0.6-0.3-1-0.3c-0.5,0-1,0.2-1.4,0.7V0H5.3z M8.3,2.7c0.2,0,0.4,0.1,0.6,0.3\r
-       C9,3.3,9.1,3.8,9.1,4.6c0,0.8,0,1.4-0.1,1.7C8.9,6.6,8.8,6.8,8.7,6.9C8.5,7,8.4,7.1,8.2,7.1C8,7.1,7.8,7,7.7,6.9\r
-       C7.5,6.7,7.5,6.6,7.4,6.3c0-0.1,0-0.4,0-0.9V3.2C7.7,2.9,8,2.7,8.3,2.7z M9.3,15.2c0.2,0.1,0.4,0.2,0.7,0.2c0.2,0,0.5-0.1,0.7-0.2\r
-       c0.2-0.1,0.4-0.3,0.6-0.6L11,14.5c-0.1,0.1-0.2,0.2-0.3,0.2c0,0-0.1,0-0.1,0s-0.1-0.1-0.1-0.1c0-0.1,0-0.2,0-0.4v-1.9\r
-       c0-0.5,0-0.9-0.1-1c-0.1-0.2-0.3-0.5-0.5-0.7c-0.3-0.2-0.7-0.3-1.1-0.3c-0.4,0-0.8,0.1-1.1,0.2S7,10.6,6.8,10.8\r
-       c-0.2,0.2-0.3,0.5-0.3,0.7c0,0.2,0.1,0.3,0.2,0.5c0.2,0.1,0.3,0.2,0.6,0.2c0.2,0,0.4-0.1,0.5-0.2C7.9,12,8,11.8,8,11.6\r
-       c0-0.1-0.1-0.3-0.2-0.4c-0.1-0.1-0.2-0.2-0.2-0.3c0-0.1,0-0.2,0.1-0.2c0.2-0.1,0.3-0.2,0.6-0.2c0.1,0,0.3,0,0.4,0.1\r
-       c0.1,0.1,0.2,0.2,0.2,0.3C9,11,9,11.2,9,11.6v0.5c-1.1,0.5-1.8,0.9-2.2,1.2c-0.3,0.3-0.5,0.7-0.5,1c0,0.3,0.1,0.5,0.3,0.7\r
-       c0.2,0.2,0.4,0.3,0.7,0.3c0.5,0,1-0.3,1.6-0.8C9,14.8,9.1,15,9.3,15.2z M8.4,14.5c-0.2,0-0.3,0-0.4-0.1c-0.1-0.1-0.2-0.3-0.2-0.4\r
-       c0-0.2,0.1-0.4,0.2-0.6c0.2-0.3,0.5-0.6,1-0.8v1.7C8.8,14.4,8.6,14.5,8.4,14.5z M15.3,14.5c-0.2,0.1-0.3,0.1-0.5,0.1\r
-       c-0.3,0-0.5-0.1-0.7-0.2c-0.3-0.2-0.5-0.5-0.6-1c-0.2-0.4-0.2-0.9-0.2-1.4c0-0.6,0.1-1,0.3-1.3c0.1-0.2,0.3-0.3,0.4-0.3\r
-       c0.1,0,0.2,0,0.3,0.1s0.1,0.2,0.2,0.5c0,0.4,0.1,0.6,0.3,0.7C14.8,12,15,12,15.2,12c0.2,0,0.4-0.1,0.5-0.2c0.1-0.1,0.2-0.3,0.2-0.5\r
-       c0-0.3-0.2-0.6-0.5-0.9c-0.3-0.3-0.7-0.4-1.2-0.4c-0.8,0-1.4,0.3-1.8,0.9c-0.4,0.5-0.5,1.1-0.5,1.8c0,0.7,0.2,1.3,0.6,1.8\r
-       s0.9,0.8,1.6,0.8c0.4,0,0.8-0.1,1.1-0.3c0.4-0.2,0.6-0.5,0.9-1L15.8,14C15.6,14.2,15.4,14.4,15.3,14.5z"/>\r
+<path style="fill:#999999;" d="M4.8,7.9H4.6v0.2h3.1V7.4C7.5,7.2,7.4,6.9,7.2,6.5L4.3,0H4.2L1.4,6.3c-0.3,0.6-0.5,1-0.7,1.2\r
+       S0.3,7.8,0,7.9v0.2h2.6V7.9C2.2,7.9,2,7.8,1.9,7.8C1.7,7.6,1.6,7.5,1.6,7.3c0-0.2,0.1-0.4,0.2-0.6l0.3-0.8h2.8l0.4,1\r
+       c0.1,0.3,0.2,0.4,0.2,0.4c0,0.1,0,0.1,0,0.2c0,0.1,0,0.2-0.1,0.3C5.3,7.8,5.1,7.9,4.8,7.9z M2.3,5.4l1.2-2.7l1.2,2.7H2.3z\r
+        M13.8,11.9c0.8,0.2,1.3,0.4,1.6,0.6c0.4,0.4,0.7,0.8,0.7,1.4c0,0.6-0.2,1.1-0.7,1.5c-0.6,0.5-1.4,0.7-2.6,0.7h-4v-0.2\r
+       c0.4,0,0.6,0,0.7-0.1s0.2-0.2,0.3-0.3s0.1-0.4,0.1-0.8V9.6c0-0.4,0-0.7-0.1-0.8S9.5,8.5,9.4,8.5S9,8.4,8.7,8.4V8.2h3.8\r
+       c0.9,0,1.6,0.1,1.9,0.2s0.7,0.4,0.9,0.7s0.3,0.7,0.3,1c0,0.4-0.1,0.7-0.4,1S14.5,11.7,13.8,11.9z M11.6,12.2v2.5l0,0.3\r
+       c0,0.2,0.1,0.4,0.2,0.5s0.3,0.2,0.5,0.2c0.3,0,0.6-0.1,0.9-0.2s0.5-0.3,0.6-0.6s0.2-0.6,0.2-0.9c0-0.4-0.1-0.7-0.3-1\r
+       s-0.4-0.5-0.7-0.6S12.2,12.2,11.6,12.2z M11.6,11.7c0.6,0,1-0.1,1.2-0.2s0.5-0.3,0.6-0.5s0.2-0.5,0.2-0.9s-0.1-0.6-0.2-0.9\r
+       s-0.3-0.4-0.6-0.5s-0.7-0.2-1.2-0.2V11.7z M5,16.1v-2.5c-0.4,0.3-0.9,0.5-1.5,0.5C2.1,14.1,1,13,1,11.6c0-0.6,0.2-1.1,0.5-1.5H2v1v1\r
+       h0.1C2.2,12.5,2.6,12.9,3,13v0.1h2v-2l3,2.5L5,16.1z"/>\r
</svg>\r
index d29072e..f7dc6c2 100644 (file)
index 9daeea5..322f6b7 100644 (file)
@@ -9,9 +9,8 @@
xml:space="preserve" preserveAspectRatio="xMinYMid meet">\r
<defs>\r
</defs>\r
-<path style="fill:#999999;" d="M2.3,2.3C3.9,0.8,5.8,0,8,0c2.2,0,4.1,0.8,5.7,2.3C15.2,3.9,16,5.8,16,8s-0.8,4.1-2.3,5.7\r
-       C12.1,15.2,10.2,16,8,16c-2.2,0-4.1-0.8-5.7-2.3C0.8,12.1,0,10.2,0,8S0.8,3.9,2.3,2.3z M12.6,3.4C11.3,2.1,9.8,1.5,8,1.5\r
-       c-1.8,0-3.3,0.6-4.6,1.9C2.1,4.7,1.5,6.2,1.5,8s0.6,3.3,1.9,4.6c1.3,1.3,2.8,1.9,4.6,1.9c1.8,0,3.3-0.6,4.6-1.9\r
-       c1.3-1.3,1.9-2.8,1.9-4.6S13.9,4.7,12.6,3.4z M11,4c0.3,0,0.5,0.1,0.7,0.3C11.9,4.5,12,4.7,12,5v3l-3,2H7V9l3-2V6H5V4H11z M7,11h2v2\r
-       H7V11z"/>\r
+<path style="fill:#989898;" d="M8,0C3.6,0,0,3.6,0,8c0,4.4,3.6,8,8,8c4.4,0,8-3.6,8-8C16,3.6,12.4,0,8,0z M8,15c-3.9,0-7-3.1-7-7\r
+       s3.1-7,7-7s7,3.1,7,7S11.9,15,8,15z M8.5,13C7.7,13,7,12.3,7,11.5c0-0.8,0.6-1.6,1.5-1.6c0.8,0,1.5,0.7,1.5,1.5S9.3,13,8.5,13z\r
+        M6,6.6c-0.6,0-1-0.4-1-1C4.9,4.5,6.1,3,8.3,3c1.4,0,3.4,1,3.4,2.6c0,0.8-0.5,1.5-1.5,1.9C8.7,8,9.5,9.1,8.2,9.1c-0.6,0-1-0.3-1-0.9\r
+       c0-1.2,1.2-1.8,1.2-3c0-0.3-0.1-0.7-0.5-0.7c-0.4,0-0.4,0.4-0.4,0.7C7.4,6.1,6.9,6.6,6,6.6z"/>\r
</svg>\r
index 163fd7a..ab6c581 100644 (file)
index dd1f0fb..675c82e 100644 (file)
@@ -9,5 +9,6 @@
xml:space="preserve" preserveAspectRatio="xMinYMid meet">\r
<defs>\r
</defs>\r
-<path style="fill:#999999;" d="M0,0h16v2H0V0z M0,10V4l4,3L0,10z M0,12h16v2H0V12z M6,3h10v2H6V3z M6,6h10v2H6V6z M6,9h10v2H6V9z"/>\r
+<path style="fill:#999999;" d="M0,12h16v2H0V12z M6,9h10v2H6V9z M6,6h10v2H6V6z M6,3h10v2H6V3z M16,2V0H0v2H16z M0,10V4l4,3L0,10z"\r
+       />\r
</svg>\r
index 29f5c97..67df09b 100644 (file)
index 3fdf5a8..e10feb9 100644 (file)
@@ -5,11 +5,11 @@
]>\r
<svg version="1.1"\r
-        x="0px" y="0px" width="16px" height="16px" viewBox="0 -1.5 16 16" style="overflow:visible;enable-background:new 0 -1.5 16 16;"\r
+        x="0px" y="0px" width="16px" height="16px" viewBox="0 0 16 16" style="overflow:visible;enable-background:new 0 0 16 16;"\r
xml:space="preserve" preserveAspectRatio="xMinYMid meet">\r
<defs>\r
</defs>\r
-<path style="fill:#999999;" d="M16,0v13H0V0H16z M15,1H1v11h14V1z M11,6.5L9,8L5,3l-3,8h12L11,6.5z M12.5,5c0.4,0,0.8-0.1,1.1-0.4\r
-       C13.9,4.3,14,3.9,14,3.5c0-0.4-0.1-0.8-0.4-1.1C13.3,2.1,12.9,2,12.5,2s-0.8,0.1-1.1,0.4C11.1,2.7,11,3.1,11,3.5\r
-       c0,0.4,0.1,0.8,0.4,1.1C11.7,4.9,12.1,5,12.5,5z"/>\r
+<path style="fill:#999999;" d="M0,0v16h16V0H0z M15,15H1V1h14V15z M11,8.5L9,10L5,5l-3,8h12L11,8.5z M12.5,6c0.4,0,0.8-0.1,1.1-0.4\r
+       C13.9,5.3,14,4.9,14,4.5c0-0.4-0.1-0.8-0.4-1.1C13.3,3.1,12.9,3,12.5,3s-0.8,0.1-1.1,0.4C11.1,3.7,11,4.1,11,4.5\r
+       c0,0.4,0.1,0.8,0.4,1.1C11.7,5.9,12.1,6,12.5,6z"/>\r
</svg>\r
index 7505977..e3d7c1b 100644 (file)
index 5de07d8..69c89a6 100644 (file)
@@ -5,10 +5,10 @@
]>\r
<svg version="1.1"\r
-        x="0px" y="0px" width="16px" height="16px" viewBox="0 -2 16 16" style="overflow:visible;enable-background:new 0 -2 16 16;"\r
+        x="0px" y="0px" width="16px" height="16px" viewBox="0 0 16 16" style="overflow:visible;enable-background:new 0 0 16 16;"\r
xml:space="preserve" preserveAspectRatio="xMinYMid meet">\r
<defs>\r
</defs>\r
-<path style="fill:#999999;" d="M16,0v12H0V0H16z M3,1H1v2h2V1z M3,5H1v2h2V5z M3,9H1v2h2V9z M12,1H4v10h8V1z M10,6L6,9V3L10,6z\r
-        M15,1h-2v2h2V1z M15,5h-2v2h2V5z M15,9h-2v2h2V9z"/>\r
+<path style="fill:#999999;" d="M0,0v16h16V0H0z M3,15H1v-2h2V15z M3,11H1V9h2V11z M3,7H1V5h2V7z M3,3H1V1h2V3z M12,15H4V1h8V15z\r
+        M15,15h-2v-2h2V15z M15,11h-2V9h2V11z M15,7h-2V5h2V7z M15,3h-2V1h2V3z M10,8l-4,3V5L10,8z"/>\r
</svg>\r
index e239542..d8a3a0b 100644 (file)
index 44702af..cf9f915 100644 (file)
@@ -5,9 +5,9 @@
]>\r
<svg version="1.1"\r
-        x="0px" y="0px" width="16px" height="16px" viewBox="0 -2 16 16" style="overflow:visible;enable-background:new 0 -2 16 16;"\r
+        x="0px" y="0px" width="16px" height="16px" viewBox="0 0 16 16" style="overflow:visible;enable-background:new 0 0 16 16;"\r
xml:space="preserve" preserveAspectRatio="xMinYMid meet">\r
<defs>\r
</defs>\r
-<path style="fill:#999999;" d="M16,6v6H0V6h2v4h12V6H16z M7,5H4V3h3V0h2v3h3v2H9v3H7V5z"/>\r
+<path style="fill:#999999;" d="M16,10v6H0v-6h2v4h12v-4H16z M7,5H4V3h3V0h2v3h3v2H9v3H7V5z"/>\r
</svg>\r
index 751a86a..c783d87 100644 (file)
index 3efa7f9..62b1d6f 100644 (file)
@@ -5,13 +5,15 @@
]>\r
<svg version="1.1"\r
-        x="0px" y="0px" width="16px" height="16px" viewBox="0 -0.6 16 16" style="overflow:visible;enable-background:new 0 -0.6 16 16;"\r
+        x="0px" y="0px" width="16px" height="16px" viewBox="0 0 16 16" style="overflow:visible;enable-background:new 0 0 16 16;"\r
xml:space="preserve" preserveAspectRatio="xMinYMid meet">\r
<defs>\r
</defs>\r
-<path style="fill:#999999;" d="M1.5,4.8L0,4c0.9-1.8,2.2-3.1,4-4l0.8,1.5C3.3,2.2,2.2,3.3,1.5,4.8z M14.7,8c0,1.9-0.7,3.4-2,4.8\r
-       c-1.3,1.3-2.9,2-4.8,2c-1.9,0-3.4-0.7-4.8-2c-1.3-1.3-2-2.9-2-4.8s0.7-3.4,2-4.8c1.3-1.3,2.9-2,4.8-2c1.9,0,3.4,0.7,4.8,2\r
-       C14.1,4.6,14.7,6.1,14.7,8z M11.6,4.4C10.6,3.5,9.4,3,8,3S5.4,3.5,4.4,4.4C3.5,5.4,3,6.6,3,8c0,1.4,0.5,2.6,1.5,3.6\r
-       c1,1,2.2,1.5,3.6,1.5s2.6-0.5,3.6-1.5c1-1,1.5-2.2,1.5-3.6C13,6.6,12.5,5.4,11.6,4.4z M8,7.7l2.6,2.1l-0.7,0.8L7.1,8.4\r
-       C7,8.3,6.9,8.2,6.9,8V4.6H8V7.7z M11.2,1.5L12,0c1.8,0.9,3.1,2.2,4,4l-1.5,0.8C13.8,3.3,12.7,2.2,11.2,1.5z"/>\r
+<path style="fill:#999999;" d="M11.9,13.4c0.3-0.2,0.5-0.4,0.8-0.7c1.3-1.3,2-2.9,2-4.8s-0.7-3.4-2-4.8c-1.3-1.3-2.9-2-4.8-2\r
+       c-1.9,0-3.4,0.7-4.8,2c-1.3,1.3-2,2.9-2,4.8s0.7,3.4,2,4.8c0.3,0.3,0.5,0.5,0.8,0.7l-0.8,1.8c-0.1,0.2,0,0.5,0.2,0.7h0\r
+       c0.2,0.1,0.5,0,0.7-0.2L4.9,14c0.9,0.5,2,0.7,3.1,0.7s2.2-0.2,3.1-0.7l0.8,1.7c0.1,0.2,0.4,0.4,0.7,0.2h0c0.2-0.1,0.4-0.4,0.2-0.7\r
+       L11.9,13.4z M8,13.7c-1.6,0-2.9-0.5-4-1.7c-1.1-1.1-1.7-2.4-1.7-4S2.8,5.1,4,4c1.1-1.1,2.4-1.7,4-1.7c1.6,0,2.9,0.5,4,1.7\r
+       c1.1,1.1,1.7,2.4,1.7,4s-0.5,2.9-1.7,4C10.9,13.2,9.6,13.7,8,13.7z M8,7.7l2.6,2.1l-0.7,0.8L7.1,8.4C7,8.3,6.9,8.2,6.9,8V4.6H8V7.7z\r
+        M11.2,1.5L12,0c1.8,0.9,3.1,2.2,4,4l-1.5,0.8C13.8,3.3,12.7,2.2,11.2,1.5z M1.5,4.8L0,4c0.9-1.8,2.2-3.1,4-4l0.8,1.5\r
+       C3.3,2.2,2.2,3.3,1.5,4.8z"/>\r
</svg>\r
index fb9951c..128b170 100644 (file)
index d1265de..304ea9b 100644 (file)
@@ -5,9 +5,11 @@
]>\r
<svg version="1.1"\r
-        x="0px" y="0px" width="16px" height="16px" viewBox="-1.1 0 16 16" style="overflow:visible;enable-background:new -1.1 0 16 16;"\r
+        x="0px" y="0px" width="16px" height="16px" viewBox="-4 -1 16 16" style="overflow:visible;enable-background:new -4 -1 16 16;"\r
xml:space="preserve" preserveAspectRatio="xMinYMid meet">\r
<defs>\r
</defs>\r
-<path style="fill:#999999;" d="M13.7,0v1.1h-2.3L5.7,14.9H8V16H0v-1.1h2.3L8,1.1H5.7V0H13.7z"/>\r
+<path style="fill:#999999;" d="M0,14.6c0.5,0,0.9-0.1,1.1-0.3c0.3-0.2,0.6-0.7,0.8-1.4L4.7,2.8c0.1-0.4,0.2-0.7,0.2-0.9\r
+       C5,1.7,5,1.6,5,1.4C5,1,4.9,0.8,4.6,0.6C4.4,0.5,4,0.4,3.3,0.4V0H9v0.4C8.4,0.5,8,0.6,7.8,0.8C7.6,0.9,7.4,1.4,7.2,2.1L4.3,12.2\r
+       c-0.1,0.4-0.2,0.7-0.2,0.9s-0.1,0.4-0.1,0.5c0,0.4,0.1,0.6,0.4,0.8s0.7,0.2,1.2,0.2V15H0V14.6z"/>\r
</svg>\r
index d1cf1ff..2f3551d 100644 (file)
index 9b505a6..c5b6319 100644 (file)
@@ -5,10 +5,10 @@
]>\r
<svg version="1.1"\r
-        x="0px" y="0px" width="16px" height="16px" viewBox="0 -1 16 16" style="overflow:visible;enable-background:new 0 -1 16 16;"\r
+        x="0px" y="0px" width="16px" height="16px" viewBox="0 0 16 16" style="overflow:visible;enable-background:new 0 0 16 16;"\r
xml:space="preserve" preserveAspectRatio="xMinYMid meet">\r
<defs>\r
</defs>\r
-<path style="fill:#999999;" d="M13,8.5l3,1.5l-8,4l-8-4l3-1.5l1.3,0.7L2.7,10L8,12.7l5.3-2.7l-1.7-0.8L13,8.5z M11.7,6.2L13.3,7\r
-       L8,9.7L2.7,7l1.7-0.8L3,5.5L0,7l8,4l8-4l-3-1.5L11.7,6.2z M16,4L8,8L0,4l8-4L16,4z M8,6.7L13.3,4L8,1.3L2.7,4L8,6.7z"/>\r
+<path style="fill:#999999;" d="M13.1,10.6L16,12l-8,4l-8-4l2.9-1.4L4,11.1L2.2,12L8,14.9l5.8-2.9L12,11.1L13.1,10.6z M12,7.1L13.8,8\r
+       L8,10.9L2.2,8L4,7.1L2.9,6.6L0,8l8,4l8-4l-2.9-1.4L12,7.1z M16,4L8,8L0,4l8-4L16,4z M8,6.9L13.8,4L8,1.1L2.2,4L8,6.9z"/>\r
</svg>\r
index e987dda..bc7b712 100644 (file)
index 9961385..cf9f45d 100644 (file)
@@ -5,10 +5,10 @@
]>\r
<svg version="1.1"\r
-        x="0px" y="0px" width="16px" height="16px" viewBox="0 -1 16 16" style="overflow:visible;enable-background:new 0 -1 16 16;"\r
+        x="0px" y="0px" width="16px" height="16px" viewBox="0 0 16 16" style="overflow:visible;enable-background:new 0 0 16 16;"\r
xml:space="preserve" preserveAspectRatio="xMinYMid meet">\r
<defs>\r
</defs>\r
-<path style="fill:#999999;" d="M13,5.5L16,4L8,0L0,4l3,1.5L0,7l3,1.5L0,10l8,4l8-4l-3-1.5L16,7L13,5.5z M13.3,10L8,12.7L2.7,10\r
-       l1.7-0.8L8,11l3.7-1.8L13.3,10z M8,9.7L2.7,7l1.7-0.8L8,8l3.7-1.8L13.3,7L8,9.7z"/>\r
+<path style="fill:#999999;" d="M13.1,10.6L16,12l-8,4l-8-4l2.9-1.4L4,11.1L2.2,12L8,14.9l5.8-2.9L12,11.1L13.1,10.6z M12,7.1L13.8,8\r
+       L8,10.9L2.2,8L4,7.1L2.9,6.6L0,8l8,4l8-4l-2.9-1.4L12,7.1z M8,0L0,4l8,4l8-4L8,0z"/>\r
</svg>\r
index 698c532..522e5fc 100644 (file)
index bc44757..963bd43 100644 (file)
@@ -5,10 +5,10 @@
]>\r
<svg version="1.1"\r
-        x="0px" y="0px" width="16px" height="16px" viewBox="0 -1 16 16" style="overflow:visible;enable-background:new 0 -1 16 16;"\r
+        x="0px" y="0px" width="16px" height="16px" viewBox="0 0 16 16" style="overflow:visible;enable-background:new 0 0 16 16;"\r
xml:space="preserve" preserveAspectRatio="xMinYMid meet">\r
<defs>\r
</defs>\r
-<path style="fill:#999999;" d="M13,8.5l3,1.5l-8,4l-8-4l3-1.5l1.3,0.7L2.7,10L8,12.7l5.3-2.7l-1.7-0.8L13,8.5z M8,8L3,5.5L0,7l8,4\r
-       l8-4l-3-1.5L8,8z M16,4L8,8L0,4l8-4L16,4z M8,6.7L13.3,4L8,1.3L2.7,4L8,6.7z"/>\r
+<path style="fill:#999999;" d="M13.1,10.6L16,12l-8,4l-8-4l2.9-1.4L4,11.1L2.2,12L8,14.9l5.8-2.9L12,11.1L13.1,10.6z M8,9.1L2.9,6.6\r
+       L0,8l8,4l8-4l-2.9-1.4L8,9.1z M16,4L8,8L0,4l8-4L16,4z M8,6.9L13.8,4L8,1.1L2.2,4L8,6.9z"/>\r
</svg>\r
index cf92d79..b89f8f0 100644 (file)
index 1642fed..f5b5986 100644 (file)
@@ -9,6 +9,6 @@
xml:space="preserve" preserveAspectRatio="xMinYMid meet">\r
<defs>\r
</defs>\r
-<path style="fill:#999999;" d="M0,6.9l4.6,4l-4.6,4V6.9z M6.9,0H16v2.3h-2.3V16h-2.3V2.3H9.1V16H6.9V8C5.8,8,4.8,7.6,4,6.8\r
-       C3.2,6,2.9,5.1,2.9,4c0-1.1,0.4-2,1.2-2.8C4.8,0.4,5.8,0,6.9,0z"/>\r
+<path style="fill:#999999;" d="M8.1,0H16v2h-2v14h-2V2h-2v14H8.1V8C7,8,6.1,7.6,5.3,6.8S4.2,5.1,4.2,4c0-1.1,0.4-2,1.1-2.8\r
+       C6.1,0.4,7,0,8.1,0z M0,6.9l4.6,4l-4.6,4V6.9z"/>\r
</svg>\r
index 6a9accf..209ef0f 100644 (file)
index 200babe..5742fb5 100644 (file)
index fcd527a..f1b6a49 100644 (file)
@@ -5,10 +5,10 @@
]>\r
<svg version="1.1"\r
-        x="0px" y="0px" width="16px" height="16px" viewBox="-0.5 0 16 16" style="overflow:visible;enable-background:new -0.5 0 16 16;"\r
+        x="0px" y="0px" width="16px" height="16px" viewBox="0 0 16 16" style="overflow:visible;enable-background:new 0 0 16 16;"\r
xml:space="preserve" preserveAspectRatio="xMinYMid meet">\r
<defs>\r
</defs>\r
-<path style="fill:#999999;" d="M2,0v4H1V1H0V0H2z M1,8.2V9h2v1H0V7.7l2-0.9V6H0V5h3v2.3L1,8.2z M3,11v5H0v-1h2v-1H0v-1h2v-1H0v-1H3z\r
-        M5,1h10v2H5V1z M5,7h10v2H5V7z M5,13h10v2H5V13z"/>\r
+<path style="fill:#999999;" d="M2,0v4H1V1H0V0H2z M6,13h10v2H6V13z M6,7h10v2H6V7z M6,1v2h10V1H6z M3,9H1V8.2l2-0.9V5H0v1h2v0.8\r
+       L0,7.7V10h3V9z M0,11v1h2v1H0v1h2v1H0v1h3v-5H0z"/>\r
</svg>\r
index 17be9c2..785494c 100644 (file)
index d657410..324dc19 100644 (file)
@@ -9,6 +9,6 @@
xml:space="preserve" preserveAspectRatio="xMinYMid meet">\r
<defs>\r
</defs>\r
-<path style="fill:#999999;" d="M0,8h2v1H0V8z M13.8,0L14,7H2l0.2-7h0.5L3,6h10l0.2-6H13.8z M2.2,16L2,10h12l-0.2,6h-0.5L13,11H3\r
-       l-0.2,5H2.2z M3,8h3v1H3V8z M7,8h2v1H7V8z M10,8h3v1h-3V8z M14,8h2v1h-2V8z"/>\r
+<path style="fill:#999999;" d="M14,10l-0.2,6h-0.5L13,11H3l-0.2,5H2.2L2,10H14z M14,9h2V8h-2V9z M10,8v1h3V8H10z M7,9h2V8H7V9z M3,9\r
+       h3V8H3V9z M0,9h2V8H0V9z M13.8,0h-0.5L13,6H3L2.8,0H2.2L2,7h12L13.8,0z"/>\r
</svg>\r
index 686d9f2..bcb5f92 100644 (file)
index b6d5daa..8d73347 100644 (file)
@@ -5,11 +5,11 @@
]>\r
<svg version="1.1"\r
-        x="0px" y="0px" width="16px" height="16px" viewBox="-0.5 0 16 16" style="overflow:visible;enable-background:new -0.5 0 16 16;"\r
+        x="0px" y="0px" width="16px" height="16px" viewBox="0 0 16 16" style="overflow:visible;enable-background:new 0 0 16 16;"\r
xml:space="preserve" preserveAspectRatio="xMinYMid meet">\r
<defs>\r
</defs>\r
-<path style="fill:#999999;" d="M15,5v8l-3,3H5v-3H0.5c-0.1,0-0.3,0-0.4-0.1C0,12.8,0,12.6,0,12.5v-10c0-0.1,0-0.3,0.1-0.4\r
-       C0.2,2,0.4,2,0.5,2H4V1c0-0.3,0.1-0.5,0.3-0.7C4.5,0.1,4.7,0,5,0h2c0.3,0,0.5,0.1,0.7,0.3C7.9,0.5,8,0.7,8,1v1h3.5\r
-       c0.1,0,0.3,0,0.4,0.1C12,2.2,12,2.4,12,2.5V5H15z M10,4V3H2v1H10z M5,2h2V1H5V2z M14,6H6v9h5v-3h3V6z M13.6,13H12v1.6L13.6,13z"/>\r
+<path style="fill:#999999;" d="M12,5V2.5C12,2.2,11.8,2,11.5,2H8V1c0-0.6-0.5-1-1-1H5C4.5,0,4,0.4,4,1v1H0.5C0.2,2,0,2.2,0,2.5v10\r
+       C0,12.8,0.2,13,0.5,13H5v3h7l3-3V5H12z M5,1L5,1l2,0c0,0,0,0,0,0l0,1H5V1z M2,3h8v1H2V3z M12,14.6V13h1.6L12,14.6z M14,12h-3v3H6V6\r
+       h8V12z"/>\r
</svg>\r
index bc65248..7874909 100644 (file)
index 01d6c86..4a143e8 100644 (file)
@@ -5,10 +5,15 @@
]>\r
<svg version="1.1"\r
-        x="0px" y="0px" width="16px" height="16px" viewBox="-2.1 0 16 16" style="overflow:visible;enable-background:new -2.1 0 16 16;"\r
-        xml:space="preserve" preserveAspectRatio="xMinYMid meet">\r
+        x="0px" y="0px" width="16px" height="16px" viewBox="-3.6 -0.2 16 16"\r
+        style="overflow:visible;enable-background:new -3.6 -0.2 16 16;" xml:space="preserve" preserveAspectRatio="xMinYMid meet">\r
<defs>\r
</defs>\r
-<path style="fill:#999999;" d="M10.1,0c0.4,0,0.8,0.2,1.1,0.5c0.3,0.3,0.5,0.7,0.5,1.1v4.8L6.4,9.6v2.1H3.2V8.5l5.3-3.2V3.2H0V0\r
-       H10.1z M3.2,12.8h3.2V16H3.2V12.8z"/>\r
+<path style="fill:#999999;" d="M1.1,1c0.7-0.7,1.8-1,3.2-1s2.6,0.4,3.4,1.1c0.8,0.7,1.2,1.6,1.2,2.7c0,0.5-0.1,1-0.2,1.4\r
+       C8.4,5.9,7.8,6.5,7,7.1C6.6,7.3,6.4,7.5,6.3,7.5C6.2,7.6,5.9,7.8,5.6,8C5.2,8.2,4.9,8.5,4.8,8.7C4.6,9,4.5,9.6,4.5,10.5H3.8l0-1\r
+       C3.8,8.9,4.1,8,4.6,7c0.6-1,0.8-2.1,0.8-3.3c0-0.9-0.2-1.6-0.5-2.2S4.2,0.8,3.4,0.8c-0.5,0-0.8,0.1-1,0.3C2.3,1.3,2.2,1.5,2.2,1.8\r
+       c0,0.1,0,0.2,0,0.2s0.1,0.1,0.2,0.2l0.2,0.2C2.7,2.6,2.8,2.8,2.9,3C3,3.2,3,3.4,3,3.6c0,0.4-0.1,0.8-0.4,1s-0.6,0.4-1,0.4\r
+       c-0.4,0-0.8-0.2-1.1-0.5C0.2,4.3,0,3.9,0,3.3C0,2.5,0.4,1.7,1.1,1z M2.8,12.8c0.4-0.4,0.8-0.6,1.4-0.6c0.5,0,1,0.2,1.4,0.6\r
+       c0.4,0.4,0.6,0.8,0.6,1.4s-0.2,1-0.6,1.4c-0.4,0.4-0.8,0.6-1.4,0.6c-0.5,0-1-0.2-1.4-0.6c-0.4-0.4-0.6-0.8-0.6-1.4\r
+       S2.4,13.2,2.8,12.8z"/>\r
</svg>\r
index efbdde7..4dba784 100644 (file)
index e1e2c45..2cfe482 100644 (file)
@@ -5,12 +5,11 @@
]>\r
<svg version="1.1"\r
-        x="0px" y="0px" width="16px" height="16px" viewBox="0 0 16 16" style="overflow:visible;enable-background:new 0 0 16 16;"\r
+        x="0px" y="0px" width="16px" height="16px" viewBox="-2 -2 16 16" style="overflow:visible;enable-background:new -2 -2 16 16;"\r
xml:space="preserve" preserveAspectRatio="xMinYMid meet">\r
<defs>\r
</defs>\r
-<path style="fill:#999999;" d="M0,14.2h1.8V16H0V14.2z M3.6,10.7h1.8v1.8H3.6V10.7z M3.6,14.2h1.8V16H3.6V14.2z M7.1,7.1h1.8v1.8\r
-       H7.1V7.1z M7.1,10.7h1.8v1.8H7.1V10.7z M7.1,14.2h1.8V16H7.1V14.2z M10.7,3.6h1.8v1.8h-1.8V3.6z M10.7,7.1h1.8v1.8h-1.8V7.1z\r
-        M10.7,10.7h1.8v1.8h-1.8V10.7z M10.7,14.2h1.8V16h-1.8V14.2z M14.2,0H16v1.8h-1.8V0z M14.2,3.6H16v1.8h-1.8V3.6z M14.2,7.1H16v1.8\r
-       h-1.8V7.1z M14.2,10.7H16v1.8h-1.8V10.7z M14.2,14.2H16V16h-1.8V14.2z"/>\r
+<path style="fill:#999999;" d="M0,12h2v2H0V12z M3,9h2v2H3V9z M3,12h2v2H3V12z M6,6h2v2H6V6z M6,9h2v2H6V9z M6,12h2v2H6V12z M9,3h2\r
+       v2H9V3z M9,6h2v2H9V6z M9,9h2v2H9V9z M9,12h2v2H9V12z M12,0h2v2h-2V0z M12,3h2v2h-2V3z M12,6h2v2h-2V6z M12,9h2v2h-2V9z M12,12h2v2\r
+       h-2V12z"/>\r
</svg>\r
index 1dbf423..d437377 100644 (file)
index 381a35c..3d8bb7d 100644 (file)
@@ -5,10 +5,10 @@
]>\r
<svg version="1.1"\r
-        x="0px" y="0px" width="16px" height="16px" viewBox="0 0 16 16" style="overflow:visible;enable-background:new 0 0 16 16;"\r
+        x="0px" y="0px" width="16px" height="16px" viewBox="-0.2 0 16 16" style="overflow:visible;enable-background:new -0.2 0 16 16;"\r
xml:space="preserve" preserveAspectRatio="xMinYMid meet">\r
<defs>\r
</defs>\r
-<path style="fill:#999999;" d="M3.9,0h8.8v2.3h-2.2V16H8.3V2.3H6.1V16H3.9V8c-1.1,0-2-0.4-2.7-1.2S0,5.1,0,4c0-1.1,0.4-2,1.1-2.8\r
-       C1.9,0.4,2.8,0,3.9,0z M16,14.9l-4.4-4l4.4-4V14.9z"/>\r
+<path style="fill:#999999;" d="M3.9,0h7.9v2h-2v14h-2V2h-2v14H3.9V8c-1.1,0-2-0.4-2.7-1.2S0,5.1,0,4c0-1.1,0.4-2,1.1-2.8\r
+       C1.9,0.4,2.8,0,3.9,0z M15.8,14.9l-4.4-4l4.4-4V14.9z"/>\r
</svg>\r
index e0ddbc5..b631b7b 100644 (file)
index 580d87f..0f4bf4c 100644 (file)
@@ -9,5 +9,5 @@
xml:space="preserve" preserveAspectRatio="xMinYMid meet">\r
<defs>\r
</defs>\r
-<path style="fill:#999999;" d="M16,2v14H0V0h14L16,2z M14,2.8L13.2,2H12v5H3V2H2v12h12V2.8z M8,6h2V2H8V6z"/>\r
+<path style="fill:#999999;" d="M13,0H0v16h16V3C15,2,14,1,13,0z M8,1h2v4H8V1z M15,15H1V1h2v5h9V1h0.5c1,1,1.8,1.8,2.5,2.5V15z"/>\r
</svg>\r
index 15e7fa4..e04a664 100644 (file)
index 4532154..48205a0 100644 (file)
@@ -5,10 +5,10 @@
]>\r
<svg version="1.1"\r
-        x="0px" y="0px" width="16px" height="16px" viewBox="-1.4 0 16 16" style="overflow:visible;enable-background:new -1.4 0 16 16;"\r
+        x="0px" y="0px" width="16px" height="16px" viewBox="-2.2 0 16 16" style="overflow:visible;enable-background:new -2.2 0 16 16;"\r
xml:space="preserve" preserveAspectRatio="xMinYMid meet">\r
<defs>\r
</defs>\r
-<path style="fill:#999999;" d="M4,0h9.1v2.3h-2.3V16H8.6V2.3H6.3V16H4V8C2.9,8,2,7.6,1.2,6.8C0.4,6,0,5.1,0,4c0-1.1,0.4-2,1.2-2.8\r
-       C2,0.4,2.9,0,4,0z"/>\r
+<path style="fill:#999999;" d="M3.9,0h7.9v2h-2v14h-2V2h-2v14H3.9V8c-1.1,0-2-0.4-2.7-1.2S0,5.1,0,4c0-1.1,0.4-2,1.1-2.8\r
+       C1.9,0.4,2.8,0,3.9,0z"/>\r
</svg>\r
@@ -1,16 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>\r
<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In  -->\r
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [\r
]>\r
<svg version="1.1"\r
-   x="0px" y="0px" width="16px" height="16px" viewBox="-1 0 16 16" style="overflow:visible;enable-background:new -1 0 16 16;"\r
-   xml:space="preserve" preserveAspectRatio="xMinYMid meet">\r
+        x="0px" y="0px" width="16px" height="16px" viewBox="-1 0 16 16" style="overflow:visible;enable-background:new -1 0 16 16;"\r
+        xml:space="preserve" preserveAspectRatio="xMinYMid meet">\r
<defs>\r
</defs>\r
<path style="fill:#999999;" d="M1,7H0V1c0-0.3,0.1-0.5,0.3-0.7C0.5,0.1,0.7,0,1,0h2c0.3,0,0.5,0.1,0.7,0.3C3.9,0.5,4,0.7,4,1v6H3V4\r
-  H1V7z M1,3h2V1H1V3z M11,8l-5.5,4.7l-2.2-2.3L2,11.5L5.5,16L12,9L11,8z M8.3,3.5c0.5,0,0.7,0.3,0.7,1V6c0,0.3-0.1,0.5-0.3,0.7\r
-  C8.5,6.9,8.3,7,8,7H5V0h3c0.3,0,0.5,0.1,0.7,0.3C8.9,0.5,9,0.7,9,1v1.5C9,3.2,8.8,3.5,8.3,3.5z M8,1H6v2h2V1z M8,4H6v2h2V4z M11,1v5\r
-  h3v1h-3c-0.3,0-0.5-0.1-0.7-0.3C10.1,6.5,10,6.3,10,6V1c0-0.3,0.1-0.5,0.3-0.7C10.5,0.1,10.7,0,11,0h3v1H11z"/>\r
-</svg>
\ No newline at end of file
+       H1V7z M1,3h2V1H1V3z M11,8l-5.5,4.7l-2.2-2.3L2,11.5L5.5,16L12,9L11,8z M8.3,3.5c0.5,0,0.7,0.3,0.7,1V6c0,0.3-0.1,0.5-0.3,0.7\r
+       C8.5,6.9,8.3,7,8,7H5V0h3c0.3,0,0.5,0.1,0.7,0.3C8.9,0.5,9,0.7,9,1v1.5C9,3.2,8.8,3.5,8.3,3.5z M8,1H6v2h2V1z M8,4H6v2h2V4z M11,1v5\r
+       h3v1h-3c-0.3,0-0.5-0.1-0.7-0.3C10.1,6.5,10,6.3,10,6V1c0-0.3,0.1-0.5,0.3-0.7C10.5,0.1,10.7,0,11,0h3v1H11z"/>\r
+</svg>\r
index 0383e82..75cd435 100644 (file)
index 40a85f3..47465b4 100644 (file)
index 83b62c7..cb9f4f6 100644 (file)
@@ -9,9 +9,10 @@
xml:space="preserve" preserveAspectRatio="xMinYMid meet">\r
<defs>\r
</defs>\r
-<path style="fill:#999999;" d="M0,7h16v1H0V7z M11.4,7.1c1,0.8,1.6,1.7,1.6,2.9c0,1.2-0.5,2.1-1.6,2.9C10.5,13.6,9.3,14,8,14\r
-       c-1.3,0-2.5-0.4-3.4-1.1C3.5,12.1,3,11.2,3,10h2c0,0.5,0.3,1,0.9,1.4S7.2,12,8,12s1.5-0.2,2.1-0.6S11,10.5,11,10\r
-       c0-0.5-0.3-1-0.9-1.4C9.5,8.2,8.8,8,8,8C6.7,8,5.5,7.6,4.6,6.9C3.5,6.1,3,5.2,3,4c0-1.2,0.5-2.1,1.6-2.9C5.5,0.4,6.7,0,8,0\r
-       c1.3,0,2.5,0.4,3.4,1.1C12.5,1.9,13,2.8,13,4h-2c0-0.5-0.3-1-0.9-1.4C9.5,2.2,8.8,2,8,2S6.5,2.2,5.9,2.6C5.3,3,5,3.5,5,4\r
-       c0,0.5,0.3,1,0.9,1.4C6.5,5.8,7.2,6,8,6C9.3,6,10.5,6.4,11.4,7.1z"/>\r
+<path style="fill:#999999;" d="M12.8,11c0,1.1-0.4,2.1-1.3,2.9c-0.9,0.8-2,1.1-3.3,1.1c-0.7,0-1.4-0.1-2.1-0.4\r
+       c-0.7-0.3-1.2-0.4-1.3-0.4c-0.3,0-0.4,0.1-0.5,0.2S4.2,14.8,4.1,15H3.6l-0.6-4h0.7c0.3,0.7,0.6,1.2,1,1.7c0.9,1,1.9,1.5,3.2,1.5\r
+       c0.7,0,1.3-0.2,1.8-0.7c0.5-0.4,0.8-1.1,0.8-1.8c0-0.2,0-0.5-0.1-0.7H12.8z M5.8,7.2L7.2,8h4.1c-0.5-0.4-1-0.8-1.7-1.2L7.6,5.6\r
+       C6.9,5.1,6.4,4.7,6,4.3C5.7,3.9,5.5,3.4,5.5,2.9c0-0.6,0.2-1.1,0.7-1.5c0.4-0.4,1-0.5,1.6-0.5c0.8,0,1.5,0.3,2.3,0.8\r
+       s1.4,1.5,1.7,2.9h0.5L11.8,0h-0.4c-0.1,0.2-0.1,0.4-0.2,0.5c-0.1,0.1-0.3,0.2-0.6,0.2c-0.1,0-0.5-0.1-1.2-0.4C8.7,0.1,8.1,0,7.6,0\r
+       C6.4,0,5.4,0.4,4.7,1.1S3.6,2.7,3.6,3.8c0,0.8,0.3,1.6,0.9,2.3C4.8,6.5,5.3,6.8,5.8,7.2z M16,9H0v1h16V9z"/>\r
</svg>\r
index 32bbafd..01f1cb8 100644 (file)
@@ -5,10 +5,14 @@
]>\r
<svg version="1.1"\r
-        x="0px" y="0px" width="16px" height="16px" viewBox="0.1 0 16 16" style="overflow:visible;enable-background:new 0.1 0 16 16;"\r
+        x="0px" y="0px" width="16px" height="16px" viewBox="0 0 16 16" style="overflow:visible;enable-background:new 0 0 16 16;"\r
xml:space="preserve" preserveAspectRatio="xMinYMid meet">\r
<defs>\r
</defs>\r
-<path style="fill:#999999;" d="M12,6l3.7,10h-2.3l-0.8-2.2H9L8.2,16H6L9.8,6H12z M12.2,12.1l-1.3-3.7h0l-1.3,3.7H12.2z M7.2,9.3\r
-       l1.1-3L6,0H3.8L0,10h2.2L3,7.8h3.7L7.2,9.3z M3.6,6.1l1.3-3.7h0l1.3,3.7H3.6z"/>\r
+<path style="fill:#999999;" d="M5,9.2v0.3h3.7L9,9.2C8.7,9.1,8.5,9.1,8.4,9C8.3,8.9,8.2,8.5,8.1,8L6.7,0H6.4L1.2,8.2\r
+       C1,8.6,0.8,8.8,0.6,9C0.5,9.1,0.3,9.1,0,9.2v0.3h2.7V9.2C2.4,9.2,2.1,9.1,2,9.1S1.8,8.9,1.8,8.7c0-0.1,0-0.2,0.1-0.3S2,8.2,2.1,8.1\r
+       l0.8-1.4h3C6,7.2,6,7.6,6,7.7c0.1,0.4,0.1,0.6,0.1,0.8C6.1,8.7,6,8.9,5.9,9S5.4,9.2,5,9.2z M3.2,6.1l2.1-3.4l0.5,3.4H3.2z M6.8,13.7\r
+       c0.3-0.1,0.5-0.2,0.6-0.3c0.2-0.1,0.4-0.4,0.6-0.7l5.2-8.2h0.4l1.3,8c0.1,0.5,0.2,0.9,0.3,1s0.4,0.2,0.8,0.2V14h-4.2v-0.3\r
+       c0.4,0,0.7-0.1,0.9-0.2s0.2-0.3,0.2-0.6c0-0.1,0-0.4-0.1-0.8c0-0.1-0.1-0.4-0.1-1h-3l-0.8,1.4c-0.1,0.1-0.1,0.2-0.1,0.3\r
+       S8.6,13,8.6,13.2c0,0.2,0.1,0.3,0.2,0.4s0.4,0.1,0.7,0.1V14H6.8V13.7z M12.5,10.5L12,7.1L10,10.5H12.5z M16,16H5v-1h11V16z"/>\r
</svg>\r
index a3df87d..d67c275 100644 (file)
index 17e52dd..43c7c0f 100644 (file)
@@ -5,10 +5,17 @@
]>\r
<svg version="1.1"\r
-        x="0px" y="0px" width="16px" height="16px" viewBox="0 -0.9 16 16" style="overflow:visible;enable-background:new 0 -0.9 16 16;"\r
+        x="0px" y="0px" width="16px" height="16px" viewBox="0 -1.4 16 16" style="overflow:visible;enable-background:new 0 -1.4 16 16;"\r
xml:space="preserve" preserveAspectRatio="xMinYMid meet">\r
<defs>\r
</defs>\r
-<path style="fill:#999999;" d="M7.2,4.7l4.7,4.7H9.4L6,6L2.5,9.4H0l4.7-4.7L0,0h2.5L6,3.5L9.4,0h2.5L7.2,4.7z M16,10.9V8.3h-3.5v1.2\r
-       h2.4v0.9l-2.4,1.1v2.7H16V13h-2.4v-0.9L16,10.9z"/>\r
+<path style="fill:#999999;" d="M10.7,14.5c1.4-1.5,2.4-2.6,2.9-3.3s0.8-1.4,0.8-2c0-0.6-0.2-1-0.5-1.3c-0.3-0.3-0.7-0.5-1.1-0.5\r
+       c-0.5,0-1,0.2-1.3,0.6c-0.2,0.2-0.4,0.5-0.5,1l-0.3-0.1c0.2-0.9,0.5-1.5,1-1.9c0.5-0.3,1-0.5,1.5-0.5c0.7,0,1.2,0.2,1.6,0.6\r
+       s0.6,0.9,0.6,1.5c0,0.6-0.2,1.3-0.7,1.9c-0.4,0.6-1.4,1.6-2.9,3.2h2.7c0.4,0,0.6,0,0.8-0.1c0.2-0.1,0.3-0.3,0.5-0.7L16,13l-0.7,1.6\r
+       h-4.7V14.5z M0,10.3c0.4,0,0.8-0.2,1-0.3c0.2-0.2,0.7-0.7,1.3-1.5l2.5-3.1L3,2.8C2.3,1.7,1.7,1,1.4,0.7C1.1,0.5,0.7,0.3,0.2,0.3V0H5\r
+       v0.3c-0.5,0-0.8,0-0.9,0.1C3.9,0.5,3.8,0.6,3.8,0.8c0,0.1,0.1,0.3,0.2,0.5C4,1.5,4,1.6,4.1,1.7l1.7,2.4l1.8-2.2\r
+       C7.8,1.6,8,1.3,8.1,1.2C8.2,1,8.2,0.9,8.2,0.8c0-0.2-0.1-0.4-0.3-0.5c-0.1,0-0.4-0.1-0.8-0.1V0h3.8v0.3c-0.4,0-0.8,0.1-1,0.2\r
+       C9.5,0.7,9.1,1.1,8.5,1.8L6.2,4.7l3,4.4C9.6,9.6,9.8,9.9,10,10s0.5,0.2,0.9,0.3v0.3H6.3v-0.3c0.5,0,0.8,0,0.9-0.1S7.5,10,7.5,9.8\r
+       c0-0.2-0.1-0.4-0.4-0.8C6.9,8.6,6.3,7.6,5.2,6L3.3,8.4C3,8.7,2.8,9,2.7,9.1C2.6,9.4,2.5,9.6,2.5,9.7c0,0.2,0.1,0.4,0.4,0.5\r
+       c0.2,0.1,0.4,0.1,0.8,0.1v0.3H0V10.3z"/>\r
</svg>\r
index 94bd660..e26a85e 100644 (file)
index 38547f5..8d0f87d 100644 (file)
@@ -9,6 +9,13 @@
xml:space="preserve" preserveAspectRatio="xMinYMid meet">\r
<defs>\r
</defs>\r
-<path style="fill:#999999;" d="M7.2,9.4l4.7,4.7H9.4L6,10.7l-3.5,3.5H0l4.7-4.7L0,4.7h2.5L6,8.2l3.5-3.5h2.5L7.2,9.4z M16,2.7V0\r
-       h-3.5v1.2h2.4v0.9l-2.4,1.1v2.7H16V4.7h-2.4V3.8L16,2.7z"/>\r
+<path style="fill:#999999;" d="M10.7,7.9c1.4-1.5,2.4-2.6,2.9-3.3s0.8-1.4,0.8-2c0-0.6-0.2-1-0.5-1.3c-0.3-0.3-0.7-0.5-1.1-0.5\r
+       c-0.5,0-1,0.2-1.3,0.6c-0.2,0.2-0.4,0.5-0.5,1l-0.3-0.1c0.2-0.9,0.5-1.5,1-1.9c0.5-0.3,1-0.5,1.5-0.5c0.7,0,1.2,0.2,1.6,0.6\r
+       s0.6,0.9,0.6,1.5c0,0.6-0.2,1.3-0.7,1.9c-0.4,0.6-1.4,1.6-2.9,3.2h2.7c0.4,0,0.6,0,0.8-0.1c0.2-0.1,0.3-0.3,0.5-0.7L16,6.4l-0.7,1.6\r
+       h-4.7V7.9z M0,14.8c0.4,0,0.8-0.2,1-0.3c0.2-0.2,0.7-0.7,1.3-1.5l2.5-3.1L3,7.3C2.3,6.2,1.7,5.5,1.4,5.3C1.1,5,0.7,4.8,0.2,4.8V4.5\r
+       H5v0.3c-0.5,0-0.8,0-0.9,0.1C3.9,5,3.8,5.1,3.8,5.3c0,0.1,0.1,0.3,0.2,0.5C4,6,4,6.1,4.1,6.2l1.7,2.4l1.8-2.2C7.8,6.1,8,5.9,8.1,5.7\r
+       c0.1-0.1,0.1-0.2,0.1-0.3c0-0.2-0.1-0.4-0.3-0.5c-0.1,0-0.4-0.1-0.8-0.1V4.5h3.8v0.3c-0.4,0-0.8,0.1-1,0.2C9.5,5.2,9.1,5.7,8.5,6.3\r
+       L6.2,9.2l3,4.4c0.3,0.5,0.6,0.8,0.8,0.9s0.5,0.2,0.9,0.3v0.3H6.3v-0.3c0.5,0,0.8,0,0.9-0.1s0.3-0.2,0.3-0.4c0-0.2-0.1-0.4-0.4-0.8\r
+       c-0.2-0.4-0.9-1.4-2-2.9l-1.9,2.4c-0.3,0.3-0.5,0.6-0.6,0.8c-0.2,0.3-0.3,0.4-0.3,0.6c0,0.2,0.1,0.4,0.4,0.5\r
+       c0.2,0.1,0.4,0.1,0.8,0.1v0.3H0V14.8z"/>\r
</svg>\r